<?xml version="1.0"?>
<doc>
    <assembly>
        <name>CodeSmith.Engine</name>
    </assembly>
    <members>
        <member name="T:CodeSmith.Engine.CommandLine.ArgumentAttribute">
            <summary>
            Allows control of command line parsing.
            Attach this attribute to instance fields of types used
            as the destination of command line argument parsing.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.ArgumentAttribute.#ctor(CodeSmith.Engine.CommandLine.ArgumentType)">
            <summary>
            Allows control of command line parsing.
            </summary>
            <param name="type"> Specifies the error checking to be done on the argument. </param>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.Type">
            <summary>
            The error checking to be done on the argument.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.DefaultShortName">
            <summary>
            Returns true if the argument did not have an explicit short name specified.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.ShortName">
            <summary>
            The short name of the argument.
            Set to null means use the default short name if it does not
            conflict with any other parameter name.
            Set to String.Empty for no short name.
            This property should not be set for DefaultArgumentAttributes.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.DefaultLongName">
            <summary>
            Returns true if the argument did not have an explicit long name specified.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.LongName">
            <summary>
            The long name of the argument.
            Set to null means use the default long name.
            The long name for every argument must be unique.
            It is an error to specify a long name of String.Empty.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.DefaultValue">
            <summary>
            The default value of the argument.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.HasDefaultValue">
            <summary>
            Returns true if the argument has a default value.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.HasHelpText">
            <summary>
            Returns true if the argument has help text specified.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.HelpText">
            <summary>
            The help text for the argument.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.ArgumentAttribute.IsToggle">
            <summary>
            Show optional boolean toggle syntax options for the arguments.  
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.CommandLine.ArgumentType">
            <summary>
            Used to control parsing of command line arguments.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.Required">
            <summary>
            Indicates that this field is required. An error will be displayed
            if it is not present when parsing arguments.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.Unique">
            <summary>
            Only valid in conjunction with Multiple.
            Duplicate values will result in an error.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.Multiple">
            <summary>
            Inidicates that the argument may be specified more than once.
            Only valid if the argument is a collection
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.AtMostOnce">
            <summary>
            The default type for non-collection arguments.
            The argument is not required, but an error will be reported if it is specified more than once.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.LastOccurenceWins">
            <summary>
            For non-collection arguments, when the argument is specified more than
            once no error is reported and the value of the argument is the last
            value which occurs in the argument list.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.ArgumentType.MultipleUnique">
            <summary>
            The default type for collection arguments.
            The argument is permitted to occur multiple times, but duplicate 
            values will cause an error to be reported.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.CommandLine.DefaultArgumentAttribute">
            <summary>
            Indicates that this argument is the default argument.
            '/' or '-' prefix only the argument value is specified.
            The ShortName property should not be set for DefaultArgumentAttribute
            instances. The LongName property is used for usage text only and
            does not affect the usage of the argument.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.DefaultArgumentAttribute.#ctor(CodeSmith.Engine.CommandLine.ArgumentType)">
            <summary>
            Indicates that this argument is the default argument.
            </summary>
            <param name="type"> Specifies the error checking to be done on the argument. </param>
        </member>
        <member name="T:CodeSmith.Engine.CommandLine.ErrorReporter">
            <summary>
            A delegate used in error reporting.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.CommandLine.Parser">
             <summary>
             Parser for command line arguments.
            
             The parser specification is infered from the instance fields of the object
             specified as the destination of the parse.
             Valid argument types are: int, uint, string, bool, enums
             Also argument types of Array of the above types are also valid.
             
             Error checking options can be controlled by adding a ArgumentAttribute
             to the instance fields of the destination object.
            
             At most one field may be marked with the DefaultArgumentAttribute
             indicating that arguments without a '-' or '/' prefix will be parsed as that argument.
            
             If not specified then the parser will infer default options for parsing each
             instance field. The default long name of the argument is the field name. The
             default short name is the first character of the long name. Long names and explicitly
             specified short names must be unique. Default short names will be used provided that
             the default short name does not conflict with a long name or an explicitly
             specified short name.
            
             Arguments which are array types are collection arguments. Collection
             arguments can be specified multiple times.
             </summary>
        </member>
        <member name="F:CodeSmith.Engine.CommandLine.Parser.NewLine">
            <summary>
            The System Defined new line string.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.#ctor">
            <summary>
            Don't ever call this.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ParseArgumentsWithUsage(System.String[],System.Object)">
            <summary>
            Parses Command Line Arguments. Displays usage message to Console.Out
            if /?, /help or invalid arguments are encounterd.
            Errors are output on Console.Error.
            Use ArgumentAttributes to control parsing behaviour.
            </summary>
            <param name="arguments"> The actual arguments. </param>
            <param name="destination"> The resulting parsed arguments. </param>
            <returns> true if no errors were detected. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ParseArguments(System.String[],System.Object)">
            <summary>
            Parses Command Line Arguments. 
            Errors are output on Console.Error.
            Use ArgumentAttributes to control parsing behaviour.
            </summary>
            <param name="arguments"> The actual arguments. </param>
            <param name="destination"> The resulting parsed arguments. </param>
            <returns> true if no errors were detected. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ParseArguments(System.String[],System.Object,CodeSmith.Engine.CommandLine.ErrorReporter)">
            <summary>
            Parses Command Line Arguments. 
            Use ArgumentAttributes to control parsing behaviour.
            </summary>
            <param name="arguments"> The actual arguments. </param>
            <param name="destination"> The resulting parsed arguments. </param>
            <param name="reporter"> The destination for parse errors. </param>
            <returns> true if no errors were detected. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ParseHelp(System.String[])">
            <summary>
            Checks if a set of arguments asks for help.
            </summary>
            <param name="args"> Args to check for help. </param>
            <returns> Returns true if args contains /? or /help. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ArgumentsUsage(System.Type)">
            <summary>
            Returns a Usage string for command line argument parsing.
            Use ArgumentAttributes to control parsing behaviour.
            Formats the output to the width of the current console window.
            </summary>
            <param name="argumentType"> The type of the arguments to display usage for. </param>
            <returns> Printable string containing a user friendly description of command line arguments. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ArgumentsUsage(System.Type,System.Int32)">
            <summary>
            Returns a Usage string for command line argument parsing.
            Use ArgumentAttributes to control parsing behaviour.
            </summary>
            <param name="argumentType"> The type of the arguments to display usage for. </param>
            <param name="columns"> The number of columns to format the output to. </param>
            <returns> Printable string containing a user friendly description of command line arguments. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.GetConsoleWindowWidth">
            <summary>
            Returns the number of columns in the current console window
            </summary>
            <returns>Returns the number of columns in the current console window</returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.IndexOf(System.Text.StringBuilder,System.Char,System.Int32)">
            <summary>
            Searches a StringBuilder for a character
            </summary>
            <param name="text"> The text to search. </param>
            <param name="value"> The character value to search for. </param>
            <param name="startIndex"> The index to stat searching at. </param>
            <returns> The index of the first occurence of value or -1 if it is not found. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.LastIndexOf(System.Text.StringBuilder,System.Char,System.Int32)">
            <summary>
            Searches a StringBuilder for a character in reverse
            </summary>
            <param name="text"> The text to search. </param>
            <param name="value"> The character to search for. </param>
            <param name="startIndex"> The index to start the search at. </param>
            <returns>The index of the last occurence of value in text or -1 if it is not found. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.#ctor(System.Type,CodeSmith.Engine.CommandLine.ErrorReporter)">
            <summary>
            Creates a new command line argument parser.
            </summary>
            <param name="argumentSpecification"> The type of object to  parse. </param>
            <param name="reporter"> The destination for parse errors. </param>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.ParseArgumentList(System.String[],System.Object)">
            <summary>
            Parses an argument list into an object
            </summary>
            <param name="args"></param>
            <param name="destination"></param>
            <returns> true if an error occurred </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.Parse(System.String[],System.Object)">
            <summary>
            Parses an argument list.
            </summary>
            <param name="args"> The arguments to parse. </param>
            <param name="destination"> The destination of the parsed arguments. </param>
            <returns> true if no parse errors were encountered. </returns>
        </member>
        <member name="M:CodeSmith.Engine.CommandLine.Parser.GetUsageString(System.Int32)">
            <summary>
            A user firendly usage string describing the command line argument syntax.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CommandLine.Parser.HasDefaultArgument">
            <summary>
            Does this parser have a default argument.
            </summary>
            <value> Does this parser have a default argument. </value>
        </member>
        <member name="M:CodeSmith.Engine.ActiveSnippetGenerator.GenerateSnippet(System.String,System.String,System.String@)">
            <summary>
            Generates the snippet.
            </summary>
            <param name="rawLine">The raw line.</param>
            <param name="targetExtension">The target extension.</param>
            <param name="output">The snippet output.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.ActiveSnippetGenerator.OutputUsage(System.String,System.String)">
            <summary>
            Outputs the usage.
            </summary>
            <param name="rawLine">The raw line.</param>
            <param name="targetExtension">The target extension.</param>
        </member>
        <member name="M:CodeSmith.Engine.AssemblyResolver.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.AssemblyResolver"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.AssemblyResolver.StartAppDomainResolving">
            <summary>
            Starts listening to the AppDomain.AssemblyResolve event.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.AssemblyResolver.StopAppDomainResolving">
            <summary>
            Stops listening to the AppDomain.AssemblyResolve event.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.AssemblyResolver.Current">
            <summary>
            Gets the current instance of FeedbackManager.
            </summary>
            <value>The current instance.</value>
        </member>
        <member name="M:CodeSmith.Engine.AssemblyResolver.ResolveItem.op_Implicit(System.String)~CodeSmith.Engine.AssemblyResolver.ResolveItem">
            <summary>
            Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:CodeSmith.Engine.AssemblyResolver.ResolveItem"/>.
            </summary>
            <param name="directory">The directory</param>
            <returns>The result of the conversion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.AssemblyResolver.ResolveItem.op_Implicit(CodeSmith.Engine.AssemblyResolver.ResolveItem)~System.String">
            <summary>
            Performs an implicit conversion from <see cref="T:CodeSmith.Engine.AssemblyResolver.ResolveItem"/> to <see cref="T:System.String"/>.
            </summary>
            <param name="item">The ResolveItem object.</param>
            <returns>The result of the conversion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.GetTemplateCacheDirectory">
            <summary>
            Directory where the template cache files are located.
            </summary>
            <value></value>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.GetTemplateCacheDirectory(System.Int32)">
            <summary>
            Directory where the template cache files are located.
            </summary>
            <value></value>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.Cleanup">
            <summary>
            Cleanup the template cache folder.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.Add(CodeSmith.Engine.CodeTemplateCacheItem)">
            <summary>
            Adds the specified item.
            </summary>
            <param name="item">The item.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.Delete(CodeSmith.Engine.CodeTemplateCacheItem)">
            <summary>
            Deletes the specified item.
            </summary>
            <param name="item">The item.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.Get(System.String)">
            <summary>
            Gets the specified template path.
            </summary>
            <param name="templatePath">The template path.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.GetWithHashCode(System.String,System.Int32)">
            <summary>
            Gets the item with specified hash code and path.
            </summary>
            <param name="templatePath">The template path.</param>
            <param name="hashCode">The hash code.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.GetCacheItems">
            <summary>
            Gets the cache items.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.CodeTemplateCache"/> class.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCache.Instance">
            <summary>
            Gets the current singleton instance of CodeTemplateCache.
            </summary>
            <value>The current singleton instance.</value>
            <remarks>
            An instance of CodeTemplateCache wont be created until the very first 
            call to the sealed class. This is a CLR optimization that
            provides a properly lazy-loading singleton. 
            </remarks>
        </member>
        <member name="T:CodeSmith.Engine.CodeTemplateCache.Nested">
            <summary>
            Nested class to lazy-load singleton.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCache.Nested.#cctor">
            <summary>
            Initializes the Nested class.
            </summary>
            <remarks>
            Explicit static constructor to tell C# compiler not to mark type as beforefieldinit.
            </remarks>
        </member>
        <member name="F:CodeSmith.Engine.CodeTemplateCache.Nested.Current">
            <summary>
            Current singleton instance.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.CodeTemplateCompiler">
            <summary>
            This class can be used to compile templates.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.#ctor(System.String)">
            <summary>
            Creates a new <see cref="T:CodeSmith.Engine.CodeTemplateCompiler"/> instance.
            </summary>
            <param name="path">Path.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.#ctor(CodeSmith.Engine.ICodeTemplateInfo)">
            <summary>
            Creates a new <see cref="T:CodeSmith.Engine.CodeTemplateCompiler"/> instance.
            </summary>
            <param name="codeTemplateInfo">Code template info.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.Compile">
            <summary>
            Compiles the specified template and outputs an assembly to the output path.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.Compile(System.Boolean)">
            <summary>
            Compiles the specified template and outputs an assembly to the output path.
            </summary>
            <param name="forceRecompile">Force recompile.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.Compile(System.String)">
            <summary>
            Compiles the specified template and outputs an assembly to the output path.
            </summary>
            <param name="outputPath">Output path.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.Compile(System.String,System.Boolean)">
            <summary>
            Compiles the specified template and outputs an assembly to the output path.
            </summary>
            <param name="outputPath">Output path.</param>
            <param name="forceRecompile">Force recompile.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateCompiler.CreateInstance">
            <summary>
            Creates an instance of the compiled template.  You must compile the template first.
            </summary>
            <returns></returns>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.CodeTemplateInfo">
            <summary>
            Gets the code template information.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.Debug">
            <summary>
            Gets or sets a value indicating whether the template should be compiled in debug mode or not.
            </summary>
            <value>
            	<c>true</c> if debug; otherwise, <c>false</c>.
            </value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.LinePragmas">
            <summary>
            Gets or sets a value indicating whether line pragmas should be output in the compiled source code.
            </summary>
            <value>
            	<c>true</c> if line pragmas should be generated; otherwise, <c>false</c>.
            </value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.KeepTempFiles">
            <summary>
            Gets or sets a value indicating whether the temp files should be kept.
            </summary>
            <value>
            	<c>true</c> if you want to keep the temp files; otherwise, <c>false</c>.
            </value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.Namespace">
            <summary>
            Namespace that the compiled template should be a member of.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.TypeName">
            <summary>
            Gets or sets the type name of the compiled template.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.CompiledAssembly">
            <summary>
            Provides access to the compiled assembly.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.GeneratedAssemblySourceCode">
            <summary>
            Provides access to the generated source code.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.Errors">
            <summary>
            Gets the errors.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateCompiler.CompilerOutputWriter">
            <summary>
            Gets or sets the compiler output writer.
            </summary>
            <value></value>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplateInfo.GetHashCode">
            <summary>
            Gets the hash code based on the template dependencies.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.FullPath">
            <summary>
            Gets the full path to the template.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.FileName">
            <summary>
            Gets the name of the template file.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.DirectoryName">
            <summary>
            Gets the name of the directory the template is located in.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.Language">
            <summary>
            Gets the template language.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.TargetLanguage">
            <summary>
            Gets the target language.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.TemplateEncoding">
            <summary>
            Gets the response encoding.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.Description">
            <summary>
            Gets the description.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.DateCreated">
            <summary>
            Gets the date the template was created.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.DateModified">
            <summary>
            Gets the date the template was modified.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.ContentHashCode">
            <summary>
            Gets the hash code based on the template content and all template Dependencies.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplateInfo.OutputType">
            <summary>
            Gets the type of the output for this template.
            </summary>
            <value>The type of the output.</value>
        </member>
        <member name="T:CodeSmith.Engine.DisposableBase">
            <summary>
            An abstract class implementing the disposable pattern.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DisposableBase.Dispose">
            <summary>
            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DisposableBase.DisposeManagedResources">
            <summary>
            Disposes the managed resources.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DisposableBase.DisposeUnmanagedResources">
            <summary>
            Disposes the unmanaged resources.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DisposableBase.Finalize">
            <summary>
            Releases unmanaged resources and performs other cleanup operations before the
            <see cref="T:CodeSmith.Engine.DisposableBase"/> is reclaimed by garbage collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DirectoryLock.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.DirectoryLock"/> class.
            </summary>
            <param name="directory">The directory.</param>
        </member>
        <member name="M:CodeSmith.Engine.DirectoryLock.AcquireWriterLock(System.Int32)">
            <summary>
            Acquires the writer lock on <see cref="P:CodeSmith.Engine.DirectoryLock.Directory"/>.
            </summary>
            <param name="millisecondsTimeout">The milliseconds timeout.</param>
        </member>
        <member name="M:CodeSmith.Engine.DirectoryLock.AcquireWriterLock(System.TimeSpan)">
            <summary>
            Acquires the writer lock on <see cref="P:CodeSmith.Engine.DirectoryLock.Directory"/>.
            </summary>
            <param name="timeout">The timeout timespan.</param>
        </member>
        <member name="M:CodeSmith.Engine.DirectoryLock.ReleaseWriterLock">
            <summary>
            Releases the writer lock.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.DirectoryLock.Directory">
            <summary>
            Gets the directory.
            </summary>
            <value>The directory.</value>
        </member>
        <member name="M:CodeSmith.Engine.ProjectCodeGenerator.GenerateCodeAsync(System.String)">
            <summary>
            Begin generating code acynronous
            </summary>
            <param name="xmlFilePath">The project file to generate</param>
        </member>
        <member name="M:CodeSmith.Engine.ProjectCodeGenerator.GenerateCode(System.String)">
            <summary>
            Generates a CodeSmith Project file based on the file path to the csp.
            </summary>
            <param name="xmlFilePath">File path to the csp file.</param>
            <returns>true if the csp was generated.</returns>
        </member>
        <member name="M:CodeSmith.Engine.ActiveSnippetConfiguration.Find(System.String,System.String)">
            <summary>
            Finds the specified alias.
            </summary>
            <param name="alias">The alias.</param>
            <param name="targetExtension">The target extension.</param>
            <returns>The <see cref="T:CodeSmith.Engine.ActiveSnippetMapping"/> instance that match closest to the alias, extension pair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.ActiveSnippetConfiguration.FindSimilar(System.String,System.String)">
            <summary>
            Finds the <see cref="T:CodeSmith.Engine.ActiveSnippetMapping"/> instance that match closest to the alias.
            </summary>
            <param name="partialAlias">The partial alias.</param>
            <param name="targetExtension">The target extension.</param>
            <returns>
            The <see cref="T:CodeSmith.Engine.ActiveSnippetMapping"/> instance that match closest to the alias.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetConfiguration.SnippetMappings">
            <summary>
            A collection of Active Snippet maps.
            </summary>
            <remarks>
            The key for the collection is the alias of the template map.
            </remarks>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetConfiguration.Instance">
            <summary>
            Gets the current singleton instance of Configuration.
            </summary>
            <value>The current singleton instance.</value>
            <remarks>
            An instance of Configuration wont be created until the very first 
            call to the sealed class. This is a CLR optimization that
            provides a properly lazy-loading singleton. 
            </remarks>
        </member>
        <member name="T:CodeSmith.Engine.ActiveSnippetConfiguration.Nested">
            <summary>
            Nested class to lazy-load singleton.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ActiveSnippetConfiguration.Nested.#cctor">
            <summary>
            Initializes the Nested class.
            </summary>
            <remarks>
            Explicit static constructor to tell C# compiler not to mark type as beforefieldinit.
            </remarks>
        </member>
        <member name="F:CodeSmith.Engine.ActiveSnippetConfiguration.Nested.Current">
            <summary>
            Current singleton instance.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.IIndexed">
            <summary>
            Interface defining an indexed object.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IIndexed.Index">
            <summary>
            Gets or sets the index.
            </summary>
            <value>The index.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.Alias">
            <summary>
            Gets or sets the alias.
            </summary>
            <value>The alias.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.TargetLanguage">
            <summary>
            Gets or sets the target language.
            </summary>
            <value>The target language.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.TemplateFile">
            <summary>
            Gets or sets the template file.
            </summary>
            <value>The template file.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.TemplateName">
            <summary>
            Gets or sets the name of the template.
            </summary>
            <value>The name of the template.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.DisplayName">
            <summary>
            Gets the name of the display.
            </summary>
            <value>The name of the display.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.Arguments">
            <summary>
            Gets or sets the arguments.
            </summary>
            <value>The arguments.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.TargetExtensions">
            <summary>
            Gets or sets the target file extensions.
            </summary>
            <value>The target extensions.</value>
        </member>
        <member name="P:CodeSmith.Engine.ActiveSnippetMapping.PropertySet">
            <summary>
            Gets or sets the property set.
            </summary>
            <value>The property set.</value>
        </member>
        <member name="T:CodeSmith.Engine.VirtualCollectionBase`1">
            <summary>
            A base Collection used to load data on depand from database.
            </summary>
            <typeparam name="T"></typeparam>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see cref="T:System.Array"/>, starting at a particular <see cref="T:System.Array"/> index.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection"/>. The <see cref="T:System.Array"/> must have zero-based indexing.</param>
            <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">
            	<paramref name="array"/> is null.
            </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is less than zero.
            </exception>
            <exception cref="T:System.ArgumentException">
            	<paramref name="array"/> is multidimensional.
            -or-
            <paramref name="index"/> is equal to or greater than the length of <paramref name="array"/>.
            -or-
            The number of elements in the source <see cref="T:System.Collections.ICollection"/> is greater than the available space from <paramref name="index"/> to the end of the destination <paramref name="array"/>.
            </exception>
            <exception cref="T:System.ArgumentException">
            The type of the source <see cref="T:System.Collections.ICollection"/> cannot be cast automatically to the type of the destination <paramref name="array"/>.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#Add(System.Object)">
            <summary>
            Adds an item to the <see cref="T:System.Collections.IList"/>.
            </summary>
            <param name="value">The <see cref="T:System.Object"/> to add to the <see cref="T:System.Collections.IList"/>.</param>
            <returns>
            The position into which the new element was inserted.
            </returns>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.IList"/> is read-only.
            -or-
            The <see cref="T:System.Collections.IList"/> has a fixed size.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#Contains(System.Object)">
            <summary>
            Determines whether the <see cref="T:System.Collections.IList"/> contains a specific value.
            </summary>
            <param name="value">The <see cref="T:System.Object"/> to locate in the <see cref="T:System.Collections.IList"/>.</param>
            <returns>
            true if the <see cref="T:System.Object"/> is found in the <see cref="T:System.Collections.IList"/>; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#IndexOf(System.Object)">
            <summary>
            Determines the index of a specific item in the <see cref="T:System.Collections.IList"/>.
            </summary>
            <param name="value">The <see cref="T:System.Object"/> to locate in the <see cref="T:System.Collections.IList"/>.</param>
            <returns>
            The index of <paramref name="value"/> if found in the list; otherwise, -1.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#Insert(System.Int32,System.Object)">
            <summary>
            Inserts an item to the <see cref="T:System.Collections.IList"/> at the specified index.
            </summary>
            <param name="index">The zero-based index at which <paramref name="value"/> should be inserted.</param>
            <param name="value">The <see cref="T:System.Object"/> to insert into the <see cref="T:System.Collections.IList"/>.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.IList"/>.
            </exception>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.IList"/> is read-only.
            -or-
            The <see cref="T:System.Collections.IList"/> has a fixed size.
            </exception>
            <exception cref="T:System.NullReferenceException">
            	<paramref name="value"/> is null reference in the <see cref="T:System.Collections.IList"/>.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#Remove(System.Object)">
            <summary>
            Removes the first occurrence of a specific object from the <see cref="T:System.Collections.IList"/>.
            </summary>
            <param name="value">The <see cref="T:System.Object"/> to remove from the <see cref="T:System.Collections.IList"/>.</param>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.IList"/> is read-only.
            -or-
            The <see cref="T:System.Collections.IList"/> has a fixed size.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.Add(`0)">
            <summary>
            Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </summary>
            <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.Clear">
            <summary>
            Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </summary>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies the elements of the <see cref="T:System.Collections.ICollection"/> to an <see cref="T:System.Array"/>, starting at a particular <see cref="T:System.Array"/> index.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection"/>. The <see cref="T:System.Array"/> must have zero-based indexing.</param>
            <param name="index">The zero-based index in <paramref name="array"/> at which copying begins.</param>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.Contains(`0)">
            <summary>
            Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value.
            </summary>
            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
            <returns>
            true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.GetEnumerator">
            <summary>
            Returns an enumerator that iterates through the collection.
            </summary>
            <returns>
            A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.IndexOf(`0)">
            <summary>
            Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>.
            </summary>
            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
            <returns>
            The index of <paramref name="item"/> if found in the list; otherwise, -1.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.Insert(System.Int32,`0)">
            <summary>
            Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index.
            </summary>
            <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param>
            <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
            </exception>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.Remove(`0)">
            <summary>
            Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </summary>
            <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
            <returns>
            true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </returns>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.RemoveAt(System.Int32)">
            <summary>
            Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index.
            </summary>
            <param name="index">The zero-based index of the item to remove.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
            </exception>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an enumerator that iterates through a collection.
            </summary>
            <returns>
            An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.GetCount">
            <summary>
            Gets the count.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.GetIndex(`0)">
            <summary>
            Gets the index.
            </summary>
            <param name="item">The item.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.GetItem(System.Int32)">
            <summary>
            Gets the item.
            </summary>
            <param name="index">The index.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.GetItems">
            <summary>
            Gets the items.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.ClearItems">
            <summary>
            Clears the items.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.AddItem(`0)">
            <summary>
            Adds the item.
            </summary>
            <param name="item">The item.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.InsertItem(System.Int32,`0)">
            <summary>
            Inserts an element into the Collection at the specified index. 
            </summary>
            <param name="index">The zero-based index at which item should be inserted. </param>
            <param name="item">The object to insert. The value can be null (Nothing in Visual Basic) for reference types.</param>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.RemoveItem(System.Int32)">
            <summary>
            Removes the element at the specified index of the Collection. 
            </summary>
            <param name="index">The zero-based index of the element to remove.</param>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.SetItem(System.Int32,`0)">
            <summary>
            Replaces the element at the specified index.
            </summary>
            <param name="index">The zero-based index of the element to replace.</param>
            <param name="item">The new value for the element at the specified index. The value can be null (Nothing in Visual Basic) for reference types.</param>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.IsCompatibleObject(System.Object)">
            <summary>
            Determines whether the specified value is compatible with Collection.
            </summary>
            <param name="value">The value to check.</param>
            <returns>
            	<c>true</c> if is a compatible object; otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.VirtualCollectionBase`1.VerifyValueType(System.Object)">
            <summary>
            Verifies the type of the value.
            </summary>
            <param name="value">The value to check.</param>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#ICollection#IsSynchronized">
            <summary>
            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"/> is synchronized (thread safe).
            </summary>
            <value></value>
            <returns>true if access to the <see cref="T:System.Collections.ICollection"/> is synchronized (thread safe); otherwise, false.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#ICollection#SyncRoot">
            <summary>
            Gets an object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"/>.
            </summary>
            <value></value>
            <returns>
            An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"/>.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#Item(System.Int32)">
            <summary>
            Gets or sets the <see cref="T:System.Object"/> at the specified index.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#IList#IsFixedSize">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.IList"/> has a fixed size.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.IList"/> has a fixed size; otherwise, false.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.Count">
            <summary>
            Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </summary>
            <value></value>
            <returns>
            The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.Item(System.Int32)">
            <summary>
            Gets or sets the type T at the specified index.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.VirtualCollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Configuration"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.UpdateLinesGenerated(System.String)">
            <summary>
            Updates Lines Generated based off of the passed in string containing source code.
            </summary>
            <param name="generatedCode">Source code.</param>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.GetHoursSaved">
            <summary>
            Returns the numbers of hours saved by using CodeSmith.
            </summary>
            <returns>Returns the numbers of hours saved by using CodeSmith.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.GetMoneySaved">
            <summary>
            Returns the amount of money saved by using CodeSmith.
            </summary>
            <returns>Returns the amount of money saved by using CodeSmith.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.ShouldCreateSamples">
            <summary>
            Checks if <see cref="P:CodeSmith.Engine.Configuration.CodeSmithSampleDirectory"/> or <see cref="P:CodeSmith.Engine.Configuration.CodeSmithMapsDirectory"/> are missing.
            </summary>
            <returns>Returns true if the samples need to be extracted</returns>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.CreateDocumentDirectories">
            <summary>
            Creates the document directories by extracting the sample zip files.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.CreateSamplesAsync">
            <summary>
            Extracts the samples on a seperate thread.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.CreateMaps">
            <summary>
            Extracts the map files.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.CreateMaps(System.Boolean)">
            <summary>
            Extracts the map files to the My Documents folder.
            </summary>
            <param name="overwrite">If true, it will overwrite preexisting map files.</param>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.ExtractFile(System.String,System.String)">
            <summary>
            Attempts to extract a zip archive.
            </summary>
            <param name="targetDirectory">The direcotry the zip file should be extracted to.</param>
            <param name="zipFile">The full path to the zip file.</param>
            <returns>true, if the file could be extracted.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.ExtractFile(System.String,System.String,System.Boolean)">
            <summary>
            Attempts to extract a file to the target directory.
            </summary>
            <param name="targetDirectory">Path that the zip file should be extracted to.</param>
            <param name="zipFile">The zip file.</param>
            <param name="overwrite">If true, all files previously existing in the target directory will be overwritten by those in the zip file.</param>
            <returns>true, if the zip file could be extracted to the target directory</returns>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.TrackLinesGenerated">
            <summary>
            Gets or sets a value indicating whether to track lines generated.
            </summary>
            <value><c>true</c> to track lines generated; otherwise, <c>false</c>.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.LinesGenerated">
            <summary>
            Gets or sets the number of lines generated.
            </summary>
            <value>The number of lines generated.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.AverageLinesPerHour">
            <summary>
            Gets or sets the average lines per hour.
            </summary>
            <value>The average lines per hour.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.AverageCostPerHour">
            <summary>
            Gets or sets the average cost per hour.
            </summary>
            <value>The average cost per hour.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.ApplicationDirectory">
            <summary>
            Gets or sets the application directory.
            </summary>
            <value>The application directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.MergeStrategyAliases">
            <summary>
            Gets the merge strategy aliases.
            </summary>
            <value>The merge strategy aliases.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.LanguageRegionDefinitions">
            <summary>
            Gets the language region definitions.
            </summary>
            <value>The language region definitions.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.PropertyDesignerMaps">
            <summary>
            Gets the property designer maps.
            </summary>
            <value>The property designer maps.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.ConditionalCompilation">
            <summary>
            Gets the conditional compilation statements for the compiler.
            </summary>
            <value>The conditional compilation.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.CodeSmithSampleDirectory">
            <summary>
            Gets or sets the CodeSmith sample directory.
            </summary>
            <value>The CodeSmith sample directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.CodeSmithMapsDirectory">
            <summary>
            Gets or sets the CodeSmith maps directory.
            </summary>
            <value>The CodeSmith maps directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.CodeSmithTemplatesDirectory">
            <summary>
            Gets or sets the CodeSmith templates directory.
            </summary>
            <value>The CodeSmith templates directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.CodeSmithDataDirectory">
            <summary>
            Gets or sets the CodeSmith data directory.
            </summary>
            <value>The CodeSmith data directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.TemplateCacheDirectory">
            <summary>
            Gets or sets the template cache directory.
            </summary>
            <value>The template cache directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.PropertySetCacheDirectory">
            <summary>
            Gets or sets the property set cache directory.
            </summary>
            <value>The property set cache directory.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.PluralOverridesMapFile">
            <summary>
            Gets or sets the plural overrides map file.
            </summary>
            <value>The plural overrides map file.</value>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.CustomerExperienceImprovementProgramEnabled">
            <summary>
            Controls whether the Customer Experience Improvement Program is enabled.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.IsEmbeddedEntryAssembly">
            <summary>
            Returns true if CodeSmith Explorer, CodeSmith Studio, or Console was not the entry assembly.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.EntryAssemblyName">
            <summary>
            Returns the name of the current Entry Assembly.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.IsExtractingSamples">
            <summary>
            Returns true if files are currently being extracted.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Configuration.Instance">
            <summary>
            Gets the current singleton instance of Configuration.
            </summary>
            <value>The current singleton instance.</value>
            <remarks>
            An instance of Configuration wont be created until the very first 
            call to the sealed class. This is a CLR optimization that
            provides a properly lazy-loading singleton. 
            </remarks>
        </member>
        <member name="T:CodeSmith.Engine.Configuration.Nested">
            <summary>
            Nested class to lazy-load singleton.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Configuration.Nested.#cctor">
            <summary>
            Initializes the Nested class.
            </summary>
            <remarks>
            Explicit static constructor to tell C# compiler not to mark type as beforefieldinit.
            </remarks>
        </member>
        <member name="F:CodeSmith.Engine.Configuration.Nested.Current">
            <summary>
            Current singleton instance.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ConfigurationBase`1.LoadSettings">
            <summary>
            Loads this instance.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ConfigurationBase`1.SaveSettings">
            <summary>
            Saves this instance.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.ConfigurationBase`1.Instance">
            <summary>
            Gets the singleton instance.
            </summary>
            <value>The singleton instance.</value>
        </member>
        <member name="M:CodeSmith.Engine.ConfigurationItemBase.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.ConfigurationItemBase"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ConfigurationItemBase.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.ConfigurationItemBase"/> class.
            </summary>
            <param name="index">The index.</param>
        </member>
        <member name="P:CodeSmith.Engine.ConfigurationItemBase.Index">
            <summary>
            Gets or sets the index.
            </summary>
            <value>The index.</value>
        </member>
        <member name="E:CodeSmith.Engine.ConfigurationItemBase.PropertyChanged">
            <summary>
            Occurs when a property value changes.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.MonitorUnhandledExceptions(System.String,System.Boolean)">
            <summary>
            Monitors Unhandled Exceptions
            </summary>
            <param name="entryPoint">Adds a tag to the CaseReport with the name of the EntryPoint (E.G. CodeSmithStudio).</param>
            <param name="showDialog">If true, this will show the submit feedback dialog box to the end user. This should always be false for console applications.</param>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowFeedbackDialog(System.Windows.Forms.IWin32Window)">
            <summary>
            Shows a feedback dialog where user can enter in Product feedback.
            </summary>
            <param name="owner"></param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowCrashReportDialog(System.Windows.Forms.IWin32Window,System.Exception)">
            <summary>
            Shows a crash report dialog.
            </summary>
            <param name="owner"></param>
            <param name="ex">The exception.</param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowCrashReportDialog(System.Windows.Forms.IWin32Window,System.Exception,System.Collections.Generic.List{System.String})">
            <summary>
            Shows a crash report dialog.
            </summary>
            <param name="owner"></param>
            <param name="ex">The exception.</param>
            <param name="tags">List of tags to add to the case.</param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowCrashReportDialog(System.Exception)">
            <summary>
            Shows a crash report dialog.
            </summary>
            <param name="ex">The exception.</param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowCrashReportDialog(System.Exception,System.Collections.Generic.List{System.String})">
            <summary>
            Shows a crash report dialog.
            </summary>
            <param name="ex">The exception.</param>
            <param name="tags">List of tags to add to the case.</param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.ShowCrashReportDialog(System.Exception,System.String,System.Collections.Generic.List{System.String})">
            <summary>
            Shows a crash report dialog.
            </summary>
            <param name="ex">The exception.</param>
            <param name="description">Report description.</param>
            <param name="tags">List of tags to add to the case.</param>
            <returns>Returns the result of the users desicion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.SendCrashReport(System.String,System.String,System.String)">
            <summary>
            Sends a crash report behind the scenes.
            </summary>
            <param name="title">Title of crash report.</param>
            <param name="description">Report description.</param>
            <param name="exceptionMessage">The exception message.</param>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.SendCrashReport(System.String,System.String,System.String,System.Collections.Generic.List{System.String})">
            <summary>
            Sends a crash report behind the scenes.
            </summary>
            <param name="title">Title of crash report.</param>
            <param name="description">Report description.</param>
            <param name="exceptionMessage">The exception message.</param>
            <param name="tags">List of tags to add to the case.</param>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.SendCrashReport(System.Exception)">
            <summary>
            Sends a crash report behind the scenes.
            </summary>
            <param name="ex">The exception.</param>
        </member>
        <member name="M:CodeSmith.Engine.Feedback.SendCrashReport(System.Exception,System.Collections.Generic.List{System.String})">
            <summary>
            Sends a crash report behind the scenes.
            </summary>
            <param name="ex">The exception.</param>
            <param name="tags">List of tags to add to the case.</param>
        </member>
        <member name="P:CodeSmith.Engine.Feedback.EntryPoint">
            <summary>
            Adds a tag to the CaseReport with the name of the EntryPoint (E.G. CodeSmithStudio).
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Feedback.ShowDialog">
            <summary>
            If true, this will show the submit feedback dialog box to the end user. This should always be false for console applications.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.DelimitedStringCollection">
            <summary>
            A collection that provides notifications when items get added, removed, or when the whole list is refreshed. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.DelimitedStringCollection"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.#ctor(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.DelimitedStringCollection"/> class.
            </summary>
            <param name="collection">The collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.DelimitedStringCollection"/> class.
            </summary>
            <param name="delimitedValues">The delimited values.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.BlockReentrancy">
            <summary>
            Disallows reentrant attempts to change this collection.
            </summary>
            <returns>An IDisposable object that can be used to dispose of the object.</returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.CheckReentrancy">
            <summary>
            Checks for reentrant attempts to change this collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.ClearItems">
            <summary>
            Removes all elements from the <see cref="T:System.Collections.ObjectModel.Collection`1"/>.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.InsertItem(System.Int32,System.String)">
            <summary>
            Inserts an element into the <see cref="T:System.Collections.ObjectModel.Collection`1"/> at the specified index.
            </summary>
            <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param>
            <param name="item">The object to insert. The value can be null for reference types.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is less than zero.
            -or-
            <paramref name="index"/> is greater than <see cref="P:System.Collections.ObjectModel.Collection`1.Count"/>.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.Move(System.Int32,System.Int32)">
            <summary>
            Moves the item at the specified index to a new location in the collection.
            </summary>
            <param name="oldIndex">The zero-based index specifying the location of the item to be moved.</param>
            <param name="newIndex">The zero-based index specifying the new location of the item.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.MoveItem(System.Int32,System.Int32)">
            <summary>
            Moves the item at the specified index to a new location in the collection.
            </summary>
            <param name="oldIndex">The zero-based index specifying the location of the item to be moved.</param>
            <param name="newIndex">The zero-based index specifying the new location of the item.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.OnCollectionChanged">
            <summary>
            Raises the CollectionChanged event with the provided arguments.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs)">
            <summary>
            Raises the PropertyChanged event with the provided arguments.
            </summary>
            <param name="e">The <see cref="T:System.ComponentModel.PropertyChangedEventArgs"/> instance containing the event data.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.OnPropertyChanged(System.String)">
            <summary>
            Raises the PropertyChanged event with the provided arguments.
            </summary>
            <param name="propertyName">Name of the property.</param>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.RemoveItem(System.Int32)">
            <summary>
            Removes the element at the specified index of the <see cref="T:System.Collections.ObjectModel.Collection`1"/>.
            </summary>
            <param name="index">The zero-based index of the element to remove.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is less than zero.
            -or-
            <paramref name="index"/> is equal to or greater than <see cref="P:System.Collections.ObjectModel.Collection`1.Count"/>.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.SetItem(System.Int32,System.String)">
            <summary>
            Replaces the element at the specified index.
            </summary>
            <param name="index">The zero-based index of the element to replace.</param>
            <param name="item">The new value for the element at the specified index. The value can be null for reference types.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            	<paramref name="index"/> is less than zero.
            -or-
            <paramref name="index"/> is greater than <see cref="P:System.Collections.ObjectModel.Collection`1.Count"/>.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.ToString">
            <summary>
            Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </summary>
            <returns>
            A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.ToString(System.Collections.Generic.IEnumerable{System.String},System.String)">
            <summary>
            Returns a <see cref="T:System.String"/> that represents the values.
            </summary>
            <param name="values">The values.</param>
            <param name="delimiter">The delimiter.</param>
            <returns>
            A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.ToString(System.Collections.Generic.IEnumerable{System.String})">
            <summary>
            Returns a <see cref="T:System.String"/> that represents the values.
            </summary>
            <param name="values">The values.</param>
            <returns>
            A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.ToArray">
            <summary>
            Returns an array of strings that represents the current collection.
            </summary>
            <returns>An array of strings that represents the current collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.AddDelimited(System.String)">
            <summary>
            Adds the split values from <paramref name="delimitedValues"/> to the collection.
            The string is split using the <see cref="P:CodeSmith.Engine.DelimitedStringCollection.Delimiter"/> property.
            </summary>
            <param name="delimitedValues">The delimited values.</param>
            <returns>The number of values added.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown when <paramref name="delimitedValues"/> is null.</exception>
        </member>
        <member name="P:CodeSmith.Engine.DelimitedStringCollection.Delimiter">
            <summary>
            Gets or sets the string delimiter.
            </summary>
            <value>The string delimiter.</value>
        </member>
        <member name="E:CodeSmith.Engine.DelimitedStringCollection.PropertyChanged">
            <summary>
            Occurs when a property value changed.
            </summary>
        </member>
        <member name="E:CodeSmith.Engine.DelimitedStringCollection.CollectionChanged">
            <summary>
            Occurs when the collection changed.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.DelimitedStringCollection.DelimitedStringTypeConverter">
            <summary>
            A type converter for the <see cref="T:CodeSmith.Engine.DelimitedStringCollection"/>.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.DelimitedStringTypeConverter.CanConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Type)">
            <summary>
            Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context.
            </summary>
            <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param>
            <param name="sourceType">A <see cref="T:System.Type"/> that represents the type you want to convert from.</param>
            <returns>
            true if this converter can perform the conversion; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.DelimitedStringTypeConverter.CanConvertTo(System.ComponentModel.ITypeDescriptorContext,System.Type)">
            <summary>
            Returns whether this converter can convert the object to the specified type, using the specified context.
            </summary>
            <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param>
            <param name="destinationType">A <see cref="T:System.Type"/> that represents the type you want to convert to.</param>
            <returns>
            true if this converter can perform the conversion; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.DelimitedStringTypeConverter.ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object)">
            <summary>
            Converts the given object to the type of this converter, using the specified context and culture information.
            </summary>
            <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param>
            <param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture.</param>
            <param name="value">The <see cref="T:System.Object"/> to convert.</param>
            <returns>
            An <see cref="T:System.Object"/> that represents the converted value.
            </returns>
            <exception cref="T:System.NotSupportedException">
            The conversion cannot be performed.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.DelimitedStringCollection.DelimitedStringTypeConverter.ConvertTo(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type)">
            <summary>
            Converts the given value object to the specified type, using the specified context and culture information.
            </summary>
            <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context.</param>
            <param name="culture">A <see cref="T:System.Globalization.CultureInfo"/>. If null is passed, the current culture is assumed.</param>
            <param name="value">The <see cref="T:System.Object"/> to convert.</param>
            <param name="destinationType">The <see cref="T:System.Type"/> to convert the <paramref name="value"/> parameter to.</param>
            <returns>
            An <see cref="T:System.Object"/> that represents the converted value.
            </returns>
            <exception cref="T:System.ArgumentNullException">
            The <paramref name="destinationType"/> parameter is null.
            </exception>
            <exception cref="T:System.NotSupportedException">
            The conversion cannot be performed.
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.IConfiguration.LoadDefaultSettings">
            <summary>
            Loads the default settings.
            </summary>
            <remarks>
            This method is called when existing config file is not 
            found.  Use this method to populate the configuration 
            class with default values.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.IConfiguration.UpgradeFile(System.IO.FileInfo@)">
            <summary>
            Upgrades the file.
            </summary>
            <param name="file">The file to upgrade.</param>
            <remarks>
            This method is called just before loading a previous config 
            file. Use this method to modify the file before it is loaded.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.IConfiguration.UpgradeSettings">
            <summary>
            Upgrades the settings.
            </summary>
            <remarks>
            This method is called after loading a previous config file. 
            Use this method to change any existing configurations to
            work with the latest version.
            </remarks>
        </member>
        <member name="P:CodeSmith.Engine.IConfiguration.CanWatchFile">
            <summary>
            Gets a value indicating whether this instance can watch file.
            </summary>
            <value>
            	<c>true</c> if this instance can watch file; otherwise, <c>false</c>.
            </value>
        </member>
        <member name="P:CodeSmith.Engine.IConfiguration.ConfigurationFile">
            <summary>
            Gets the configuration file.
            </summary>
            <value>The configuration file.</value>
        </member>
        <member name="P:CodeSmith.Engine.IConfiguration.IsBackwardCompatible">
            <summary>
            Gets a value indicating whether this configuration is backward compatible.
            </summary>
            <value>
            	<c>true</c> if this configuration is backward compatible; otherwise, <c>false</c>.
            </value>
        </member>
        <member name="P:CodeSmith.Engine.IConfiguration.ConfigurationVersion">
            <summary>
            Gets or sets the configuration version.
            </summary>
            <value>The configuration version.</value>
        </member>
        <member name="P:CodeSmith.Engine.LanguageRegionDefinition.LanguageKeys">
            <summary>
            Gets the list of language keys for the region defintion.
            </summary>
            <value>The language keys.</value>
        </member>
        <member name="P:CodeSmith.Engine.LanguageRegionDefinition.RegionStartRegex">
            <summary>
            Gets or sets the region start regex.
            </summary>
            <value>The region start regex.</value>
        </member>
        <member name="P:CodeSmith.Engine.LanguageRegionDefinition.RegionEndRegex">
            <summary>
            Gets or sets the region end regex.
            </summary>
            <value>The region end regex.</value>
        </member>
        <member name="P:CodeSmith.Engine.MergeStrategyAlias.Name">
            <summary>
            Gets or sets the name of the merge strategy alias.
            </summary>
            <value>The merge strategy alias name.</value>
        </member>
        <member name="P:CodeSmith.Engine.MergeStrategyAlias.TypeName">
            <summary>
            Gets or sets the fully qualified type name for the merge strategy.
            </summary>
            <value>The name of the type.</value>
        </member>
        <member name="P:CodeSmith.Engine.PropertyDesignerMap.DataTypes">
            <summary>
            Gets the list of data types the designer should be used for.
            </summary>
            <value>The data types.</value>
        </member>
        <member name="P:CodeSmith.Engine.PropertyDesignerMap.EditorType">
            <summary>
            Gets or sets the type of the editor.
            </summary>
            <value>The type of the editor.</value>
        </member>
        <member name="P:CodeSmith.Engine.PropertyDesignerMap.SerializerType">
            <summary>
            Gets or sets the type of the serializer.
            </summary>
            <value>The type of the serializer.</value>
        </member>
        <member name="T:CodeSmith.Engine.CodeTemplate">
            <summary>
            All templates must derive from this class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnInit">
            <summary>
            This method can be overridden to perform logic when the template instance is created.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetPropertyDefaults">
            <summary>
            This method is overridden in templates to set default values in a template instance.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetUnknownDirectiveAttributes">
            <summary>
            This method is overridden in templates to set unknown directive attributes in the ContextData.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnPreRender">
            <summary>
            This method can be overridden to perform logic before the template is rendered.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnError(System.Exception)">
            <summary>
            This method can be overridden to perform logic when a template exception occurs.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnPropertyChanged(System.String)">
            <summary>
            This method can be overridden to perform logic when a property changes.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.Render(System.IO.TextWriter)">
            <summary>
            Renders to the template output to the specified writer.
            </summary>
            <param name="writer">Writer.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnPostRender(System.String)">
            <summary>
            This method can be overridden to perform logic after the template is rendered.
            </summary>
            <param name="result">The template output.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToString">
            <summary>
            Renders the template output to a string.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToString(System.String,CodeSmith.Engine.IMergeStrategy)">
            <summary>
            Renders the template output to a string.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(System.String,System.Boolean)">
            <summary>
            Renders the template output to a file.
            </summary>
            <param name="path">The output file path.</param>
            <param name="overwrite">if set to <c>true</c> overwrite file.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(System.String,System.String,System.Boolean)">
            <summary>
            Renders the template output to a file.
            </summary>
            <param name="path">The output file path.</param>
            <param name="dependentUpon">The file that the output is dependent upon.</param>
            <param name="overwrite">if set to <c>true</c> overwrite file.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(CodeSmith.Engine.OutputFile,System.Boolean)">
            <summary>
            Renders the template output to a file.
            </summary>
            <param name="outputFile">The output file.</param>
            <param name="overwrite">if set to <c>true</c> overwrite file.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(System.String,CodeSmith.Engine.IMergeStrategy)">
            <summary>
            Renders the template output to a file using a merge strategy.
            </summary>
            <param name="path">The output path.</param>
            <param name="strategy">The merge strategy to use.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(System.String,System.String,CodeSmith.Engine.IMergeStrategy)">
            <summary>
            Renders the template output to a file using a merge strategy.
            </summary>
            <param name="path">The output path.</param>
            <param name="strategy">The merge strategy to use.</param>
            <param name="sourcePath">The source file to base the merge on.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RenderToFile(CodeSmith.Engine.OutputFile,System.String,CodeSmith.Engine.IMergeStrategy)">
            <summary>
            Renders the template output to a file using a merge strategy.
            </summary>
            <param name="outputFile">The output file.</param>
            <param name="strategy">The merge strategy to use.</param>
            <param name="sourcePath">The source file to base the merge on.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.Validate">
            <summary>
            Validates this template instance.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetFileName">
            <summary>
            Gets a default name for the template output.  This can be overriden in your template to provide a suitable name for the output of the template based on the property values.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetContextData(System.Collections.Specialized.NameValueCollection)">
            <summary>
            Set the context data object for the template.
            Any items in the current ContextData object will be added to the new one.
            This method should only be called while a template is initializing.
            </summary>
            <param name="contextData">The context data object.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.ParseDefaultValue(System.Reflection.PropertyInfo,System.String)">
            <summary>
            Parses the default value for properties.  This can be overridden to provide custom default parsing logic.
            </summary>
            <param name="targetProperty">Target property.</param>
            <param name="defaultValue">Default value.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetPropertyAttribute(System.String,System.String)">
            <summary>
            Gets the property attribute.  Property attributes can be used to store various information at the property level.
            </summary>
            <param name="propertyName">Name of the property.</param>
            <param name="attributeName">Name of the attribute.</param>
            <returns>The value of the attribute</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetPropertyAttribute(System.String,System.String,System.String)">
            <summary>
            Sets the property attribute.  Property attributes can be used to store various information at the property level.
            </summary>
            <param name="propertyName">Name of the property.</param>
            <param name="attributeName">Name of the attribute.</param>
            <param name="attributeValue">The attribute value.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetTemplateAttribute(System.String)">
            <summary>
            Gets the template attribute.  Template attributes can be used to store various information at the template level.
            </summary>
            <param name="attributeName">Name of the attribute.</param>
            <returns>The value of the attribute</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetTemplateAttribute(System.String,System.String)">
            <summary>
            Sets the template attribute.  Template attributes can be used to store various information at the template level.
            </summary>
            <param name="attributeName">Name of the attribute.</param>
            <param name="attributeValue">The attribute value.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetProperties">
            <summary>
            Gets information on all of the properties on this template.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetProperties(System.Boolean)">
            <summary>
            Gets information on all of the properties on this template.
            </summary>
            <param name="includeNonBrowsable">Whether non-browsable properties should be included.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetRequiredProperties">
            <summary>
            Gets information on all of the required properties for this template.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SavePropertiesToHashtable">
            <summary>
            Saves the properties to a Hashtable.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SavePropertiesToHashtable(System.Boolean)">
            <summary>
            Saves the properties to a Hashtable.
            </summary>
            <returns></returns>
            <param name="includeNonBrowsable">Whether non-browsable properties should be included.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RestorePropertiesFromHashtable(System.Collections.Hashtable)">
            <summary>
            Restores the properties from a Hashtable.
            </summary>
            <param name="properties">Properties.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SavePropertiesToXmlFile(System.String)">
            <summary>
            Saves the properties to an XML file.
            </summary>
            <param name="xmlFilePath">XML file path.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.CopyPropertiesTo(CodeSmith.Engine.CodeTemplate)">
            <summary>
            Copies any matching properties to another CodeTemplate instance.
            </summary>
            <param name="template">Template.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.CopyPropertiesTo(CodeSmith.Engine.CodeTemplate,System.Boolean)">
            <summary>
            Copies any matching properties to another CodeTemplate instance.
            </summary>
            <param name="template">Template.</param>
            <param name="includeNonBrowsable">Whether non-browsable properties should be included.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RestorePropertiesFromXmlFile(System.String)">
            <summary>
            Restores the properties from XML file.
            </summary>
            <param name="xmlFilePath">XML file path.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SavePropertiesToXml(System.Xml.XmlWriter)">
            <summary>
            Saves the properties to XML.
            </summary>
            <param name="xmlwriter">Xmlwriter.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SavePropertiesToXml">
            <summary>
            Saves the properties to XML.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RestorePropertiesFromXml(System.String,System.String)">
            <summary>
            Restores the properties from XML.
            </summary>
            <param name="xmlFragment">The XML fragment.</param>
            <param name="baseDirectory">The base directory to resolve file references.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetProperty(System.String,System.Object)">
            <summary>
            Sets the value for the specified property.
            </summary>
            <param name="name">Property name.</param>
            <param name="value">Value to assign.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.SetProperty(System.Reflection.PropertyInfo,System.Object)">
            <summary>
            Sets the value for the specified property.
            </summary>
            <param name="propertyInfo">Information about the target property.</param>
            <param name="value">Value to assign.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetProperty(System.String)">
            <summary>
            Gets the value for the specified property.
            </summary>
            <param name="name">Property name.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetCodeTemplateInstance(System.String)">
            <summary>
            Gets an instance of the specified template.
            </summary>
            <param name="templatePath">Path to the template.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetCodeTemplateInstance(System.String,System.Boolean)">
            <summary>
            Gets an instance of the specified template.
            </summary>
            <param name="templatePath">Path to the template.</param>
            <param name="forceRecompile">Forces the template to be recompiled instead of using the cache.</param>
            <returns>The CodeTemplate instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.GetCodeTemplateInstance(System.String,System.Boolean,System.Boolean)">
            <summary>
            Gets an instance of the specified template.
            </summary>
            <param name="templatePath">Path to the template.</param>
            <param name="forceRecompile">Forces the template to be recompiled instead of using the cache.</param>
            <param name="shareContextData">Share template context data with the child template instance.</param>
            <returns>The CodeTemplate instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnOutputRegistered(CodeSmith.Engine.OutputRegisteredEventArgs)">
            <summary>
                This is the method that is responsible for notifying
                receivers that the event occurred
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnPreOutputWritten(CodeSmith.Engine.OutputCancelEventArgs)">
            <summary>
                This is the method that is responsible for notifying
                receivers that the event occurred
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnPreOutputWritten(System.String)">
            <summary>
                This is the method that is responsible for notifying
                receivers that the event occurred
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.OnReferenceRegistered(CodeSmith.Engine.ItemRegisteredEventArgs)">
            <summary>
            Raises the <see cref="E:ReferenceRegistered"/> event.
            </summary>
            <param name="e">The <see cref="T:CodeSmith.Engine.ItemRegisteredEventArgs"/> instance containing the event data.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.RegisterReference(System.String)">
            <summary>
            Registers the reference.
            </summary>
            <param name="referenceName">Name of the reference.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.Create``1">
            <summary>
            Gets an instance of the specified template type.  Should be used with the Register directive.
            </summary>
            <returns>The CodeTemplate instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeTemplate.Create``1(System.Boolean)">
            <summary>
            Gets an instance of the specified template type.  Should be used with the Register directive.
            </summary>
            <param name="shareContextData">Share template context data with the child template instance.</param>
            <returns>The CodeTemplate instance.</returns>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplate.Response">
            <summary>
            Response stream for the template output.  You can write to the stream programmatically using this property.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplate.Progress">
            <summary>
            Provides a way to report execution progress for the template.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplate.State">
            <summary>
            State of this template instance.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplate.CodeTemplateInfo">
            <summary>
            Gets the information for the current template.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.CodeTemplate.ValidationErrors">
            <summary>
            Gets the validation errors for this template.
            </summary>
            <value></value>
        </member>
        <member name="E:CodeSmith.Engine.CodeTemplate.OutputRegistered">
            <summary>
                Raised when an output file is registered
            </summary>
        </member>
        <member name="E:CodeSmith.Engine.CodeTemplate.PreOutputWritten">
            <summary>
                Raised prior to an output being written to disk
            </summary>
        </member>
        <member name="E:CodeSmith.Engine.CodeTemplate.ReferenceRegistered">
            <summary>
            Occurs when a reference is registered.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.OutputFile">
            <summary>
            A class representing a template output file.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputFile"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.#ctor(System.String,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputFile"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
            <param name="metadata">The metadata.</param>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.#ctor(System.String,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputFile"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
            <param name="dependentUpon">The file that output is dependent upon.</param>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.#ctor(System.String,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputFile"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
            <param name="dependentUpon">The file that output is dependent upon.</param>
            <param name="metadata">The metadata.</param>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.op_Implicit(System.String)~CodeSmith.Engine.OutputFile">
            <summary>
            Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:CodeSmith.Engine.OutputFile"/>.
            </summary>
            <param name="outputFile">The output file.</param>
            <returns>The result of the conversion.</returns>
        </member>
        <member name="M:CodeSmith.Engine.OutputFile.op_Implicit(CodeSmith.Engine.OutputFile)~System.String">
            <summary>
            Performs an implicit conversion from <see cref="T:CodeSmith.Engine.OutputFile"/> to <see cref="T:System.String"/>.
            </summary>
            <param name="outputFile">The output file.</param>
            <returns>The result of the conversion.</returns>
        </member>
        <member name="P:CodeSmith.Engine.OutputFile.OutputFileName">
            <summary>
            Gets the name of the output file.
            </summary>
            <value>The name of the output file.</value>
        </member>
        <member name="P:CodeSmith.Engine.OutputFile.DependentUpon">
            <summary>
            Gets or sets the dependent upon file.
            </summary>
            <value>The dependent upon file.</value>
        </member>
        <member name="P:CodeSmith.Engine.OutputFile.Metadata">
            <summary>
            Gets the metadata.
            </summary>
            <value>The metadata.</value>
        </member>
        <member name="T:CodeSmith.Engine.ItemRegisteredEventArgs">
            <summary>
            
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ItemRegisteredEventArgs.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.ItemRegisteredEventArgs"/> class.
            </summary>
            <param name="itemName">Name of the item.</param>
        </member>
        <member name="P:CodeSmith.Engine.ItemRegisteredEventArgs.ItemName">
            <summary>
            Gets or sets the name of the item.
            </summary>
            <value>The name of the item.</value>
        </member>
        <member name="T:CodeSmith.Engine.OutputCancelEventArgs">
            <summary>
            
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.OutputRegisteredEventArgs">
            <summary>
                EventArgs derived type which holds the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.OutputRegisteredEventArgs.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputRegisteredEventArgs"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
        </member>
        <member name="M:CodeSmith.Engine.OutputRegisteredEventArgs.#ctor(CodeSmith.Engine.OutputFile)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputRegisteredEventArgs"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
        </member>
        <member name="P:CodeSmith.Engine.OutputRegisteredEventArgs.OutputFile">
            <summary>
            Gets or sets the output file.
            </summary>
            <value>The output file.</value>
        </member>
        <member name="M:CodeSmith.Engine.OutputCancelEventArgs.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputCancelEventArgs"/> class.
            </summary>
            <param name="outputFile"></param>
        </member>
        <member name="M:CodeSmith.Engine.OutputCancelEventArgs.#ctor(CodeSmith.Engine.OutputFile)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.OutputCancelEventArgs"/> class.
            </summary>
            <param name="outputFile">The output file.</param>
        </member>
        <member name="P:CodeSmith.Engine.OutputCancelEventArgs.Cancel">
            <summary>
            Gets or sets a value indicating whether this output is canceled
            </summary>
            <value><c>true</c> if cancel; otherwise, <c>false</c>.</value>
        </member>
        <member name="T:CodeSmith.Engine.OutputCancelEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.OutputRegisteredEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.Progress">
            <summary>
            Progress information.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Progress.PerformStep">
            <summary>
            Performs a progress step.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Progress.Increment(System.Int32)">
            <summary>
            Increments the current progress value by the specified amount.
            </summary>
            <param name="value">Value.</param>
        </member>
        <member name="E:CodeSmith.Engine.Progress.OnProgress">
            <summary>
            Occurs when the progress value has been changed.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Progress.MinimumValue">
            <summary>
            Minimum progress value.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Progress.MaximumValue">
            <summary>
            Maximum progress value.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Progress.Value">
            <summary>
            Gets or sets the current progress value.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.Progress.Step">
            <summary>
            Gets or sets the step increment value.
            </summary>
            <value></value>
        </member>
        <member name="T:CodeSmith.Engine.ValidationError">
            <summary>
            Provides information about a template validation error.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorCompleteEventArgs">
            <summary>
                EventArgs derived type which holds the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorCompleteEventArgs.#ctor(System.Boolean,System.Collections.ObjectModel.ReadOnlyCollection{CodeSmith.Engine.OutputFile})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.GeneratorCompleteEventArgs"/> class.
            </summary>
            <param name="result">if set to <c>true</c> generation was successful.</param>
            <param name="registeredOutputs">The registered outputs.</param>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorCompleteEventArgs.#ctor(System.Boolean,System.Collections.ObjectModel.ReadOnlyCollection{CodeSmith.Engine.OutputFile},System.Collections.ObjectModel.ReadOnlyCollection{System.String})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.GeneratorCompleteEventArgs"/> class.
            </summary>
            <param name="result">if set to <c>true</c> [result].</param>
            <param name="registeredOutputs">The registered outputs.</param>
            <param name="registeredReferences">The registered references.</param>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorCompleteEventArgs.#ctor(System.Boolean,System.Collections.ObjectModel.ReadOnlyCollection{CodeSmith.Engine.OutputFile},System.Collections.ObjectModel.ReadOnlyCollection{System.String},System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.GeneratorCompleteEventArgs"/> class.
            </summary>
            <param name="result">if set to <c>true</c> [result].</param>
            <param name="registeredOutputs">The registered outputs.</param>
            <param name="registeredReferences">The registered references.</param>
            <param name="cspFileName">The file path of the CodeSmith project file.</param>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorCompleteEventArgs.#ctor(System.Exception)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.GeneratorCompleteEventArgs"/> class.
            </summary>
            <param name="error">The error.</param>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorCompleteEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorErrorEventArgs">
            <summary>
                EventArgs derived type which holds the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorErrorEventArgs.#ctor(System.String,System.Boolean,System.Int32,System.String,System.Int32,System.Int32)">
            <summary>
                Use this constructor to initialize the event arguments
                object with the custom event fields
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorErrorEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorProgressEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.MessageEventArgs">
            <summary>
                EventArgs derived type which holds the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.MessageEventArgs.#ctor(System.String)">
            <summary>
                Use this constructor to initialize the event arguments
                object with the custom event fields
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.MessageEventHandler">
            <summary>
                This represents the delegate method prototype that
                event receivers must implement
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.GeneratorProgressEventArgs">
            <summary>
                EventArgs derived type which holds the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.GeneratorProgressEventArgs.#ctor(System.Int32,System.Int32)">
            <summary>
                Use this constructor to initialize the event arguments
                object with the custom event fields
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Map.GetMapFiles">
            <summary>
            Gets the map files.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Map.Load(System.String)">
            <summary>
            Loads the specified name.
            </summary>
            <param name="name">The name.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Map.TryResolvePath(System.String,System.String,System.String@)">
            <summary>
            Tries the resolve path.
            </summary>
            <param name="mapName">Name of the map.</param>
            <param name="baseDirectory">The base directory.</param>
            <param name="fullPath">The full path.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.MapCollection"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.#ctor(System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.MapCollection"/> class.
            </summary>
            <param name="caseSensitive">Whether map lookups should be case sensitive or not.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.MapCollection"/> class.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.#ctor(System.String,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.MapCollection"/> class.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
            <param name="reverse">if set to <c>true</c> the key and value will be reversed.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.#ctor(System.String,System.Boolean,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.MapCollection"/> class.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
            <param name="reverse">if set to <c>true</c> the key and value will be reversed.</param>
            <param name="defaultValue">The default value.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Save(System.String)">
            <summary>
            Saves the specified map file name.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Load(System.String)">
            <summary>
            Loads the specified map file name.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Load(System.String,System.Boolean)">
            <summary>
            Loads the specified map file name.
            </summary>
            <param name="mapFileName">Name of the map file.</param>
            <param name="reverse">if set to <c>true</c> [reverse].</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.ToString">
            <summary>
            Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
            </summary>
            <returns>
            A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Add(System.String,System.String)">
            <summary>
            Adds an element with the provided key and value to the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <param name="key">The object to use as the key of the element to add.</param>
            <param name="value">The object to use as the value of the element to add.</param>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IDictionary`2"></see> is read-only.</exception>
            <exception cref="T:System.ArgumentException">An element with the same key already exists in the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</exception>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.ContainsKey(System.String)">
            <summary>
            Determines whether the <see cref="T:System.Collections.Generic.IDictionary`2"></see> contains an element with the specified key.
            </summary>
            <param name="key">The key to locate in the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</param>
            <returns>
            true if the <see cref="T:System.Collections.Generic.IDictionary`2"></see> contains an element with the key; otherwise, false.
            </returns>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.ContainsValue(System.String)">
            <summary>
            Determines whether the specified value contains value.
            </summary>
            <param name="value">The value.</param>
            <returns>
            	<c>true</c> if the specified value contains value; otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.GetEnumerator">
            <summary>
            Gets the enumerator.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Remove(System.String)">
            <summary>
            Removes the element with the specified key from the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <param name="key">The key of the element to remove.</param>
            <returns>
            true if the element is successfully removed; otherwise, false.  This method also returns false if key was not found in the original <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </returns>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IDictionary`2"></see> is read-only.</exception>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.TryGetValue(System.String,System.String@)">
            <summary>
            Tries the get value.
            </summary>
            <param name="key">The key.</param>
            <param name="value">The value.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an enumerator that iterates through a collection.
            </summary>
            <returns>
            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies the elements of the <see cref="T:System.Collections.ICollection"></see> to an <see cref="T:System.Array"></see>, starting at a particular <see cref="T:System.Array"></see> index.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"></see> that is the destination of the elements copied from <see cref="T:System.Collections.ICollection"></see>. The <see cref="T:System.Array"></see> must have zero-based indexing.</param>
            <param name="index">The zero-based index in array at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">array is null. </exception>
            <exception cref="T:System.ArgumentOutOfRangeException">index is less than zero. </exception>
            <exception cref="T:System.ArgumentException">array is multidimensional.-or- index is equal to or greater than the length of array.-or- The number of elements in the source <see cref="T:System.Collections.ICollection"></see> is greater than the available space from index to the end of the destination array. </exception>
            <exception cref="T:System.InvalidCastException">The type of the source <see cref="T:System.Collections.ICollection"></see> cannot be cast automatically to the type of the destination array. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Add(System.Object,System.Object)">
            <summary>
            Adds an element with the provided key and value to the <see cref="T:System.Collections.IDictionary"></see> object.
            </summary>
            <param name="key">The <see cref="T:System.Object"></see> to use as the key of the element to add.</param>
            <param name="value">The <see cref="T:System.Object"></see> to use as the value of the element to add.</param>
            <exception cref="T:System.ArgumentException">An element with the same key already exists in the <see cref="T:System.Collections.IDictionary"></see> object. </exception>
            <exception cref="T:System.ArgumentNullException">key is null. </exception>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IDictionary"></see> is read-only.-or- The <see cref="T:System.Collections.IDictionary"></see> has a fixed size. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.Clear">
            <summary>
            Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"></see>.
            </summary>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Contains(System.Object)">
            <summary>
            Determines whether the <see cref="T:System.Collections.IDictionary"></see> object contains an element with the specified key.
            </summary>
            <param name="key">The key to locate in the <see cref="T:System.Collections.IDictionary"></see> object.</param>
            <returns>
            true if the <see cref="T:System.Collections.IDictionary"></see> contains an element with the key; otherwise, false.
            </returns>
            <exception cref="T:System.ArgumentNullException">key is null. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#GetEnumerator">
            <summary>
            Returns an <see cref="T:System.Collections.IDictionaryEnumerator"></see> object for the <see cref="T:System.Collections.IDictionary"></see> object.
            </summary>
            <returns>
            An <see cref="T:System.Collections.IDictionaryEnumerator"></see> object for the <see cref="T:System.Collections.IDictionary"></see> object.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Remove(System.Object)">
            <summary>
            Removes the element with the specified key from the <see cref="T:System.Collections.IDictionary"></see> object.
            </summary>
            <param name="key">The key of the element to remove.</param>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.IDictionary"></see> object is read-only.-or- The <see cref="T:System.Collections.IDictionary"></see> has a fixed size. </exception>
            <exception cref="T:System.ArgumentNullException">key is null. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.OnDeserialization(System.Object)">
            <summary>
            Runs when the entire object graph has been deserialized.
            </summary>
            <param name="sender">The object that initiated the callback. The functionality for this parameter is not currently implemented.</param>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Populates a <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> with the data needed to serialize the target object.
            </summary>
            <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> to populate with data.</param>
            <param name="context">The destination (see <see cref="T:System.Runtime.Serialization.StreamingContext"></see>) for this serialization.</param>
            <exception cref="T:System.Security.SecurityException">The caller does not have the required permission. </exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{System#String@System#String}}#Add(System.Collections.Generic.KeyValuePair{System.String,System.String})">
            <summary>
            Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"></see>.
            </summary>
            <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"></see>.</param>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{System#String@System#String}}#Contains(System.Collections.Generic.KeyValuePair{System.String,System.String})">
            <summary>
            Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"></see> contains a specific value.
            </summary>
            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"></see>.</param>
            <returns>
            true if item is found in the <see cref="T:System.Collections.Generic.ICollection`1"></see>; otherwise, false.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{System#String@System#String}}#CopyTo(System.Collections.Generic.KeyValuePair{System.String,System.String}[],System.Int32)">
            <summary>
            Copies the elements of the <see cref="T:System.Collections.Generic.ICollection`1"></see> to an <see cref="T:System.Array"></see>, starting at a particular <see cref="T:System.Array"></see> index.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"></see> that is the destination of the elements copied from <see cref="T:System.Collections.Generic.ICollection`1"></see>. The <see cref="T:System.Array"></see> must have zero-based indexing.</param>
            <param name="arrayIndex">The zero-based index in array at which copying begins.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">arrayIndex is less than 0.</exception>
            <exception cref="T:System.ArgumentNullException">array is null.</exception>
            <exception cref="T:System.ArgumentException">array is multidimensional.-or-arrayIndex is equal to or greater than the length of array.-or-The number of elements in the source <see cref="T:System.Collections.Generic.ICollection`1"></see> is greater than the available space from arrayIndex to the end of the destination array.-or-Type T cannot be cast automatically to the type of the destination array.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{System#String@System#String}}#Remove(System.Collections.Generic.KeyValuePair{System.String,System.String})">
            <summary>
            Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"></see>.
            </summary>
            <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"></see>.</param>
            <returns>
            true if item was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"></see>; otherwise, false. This method also returns false if item is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"></see>.
            </returns>
            <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only.</exception>
        </member>
        <member name="M:CodeSmith.Engine.MapCollection.System#Collections#Generic#IEnumerable{System#Collections#Generic#KeyValuePair{System#String@System#String}}#GetEnumerator">
            <summary>
            Returns an enumerator that iterates through the collection.
            </summary>
            <returns>
            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.FileName">
            <summary>
            Gets the name of the file.
            </summary>
            <value>The name of the file.</value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.CaseSensitive">
            <summary>
            Wether the map lookups should be case Sensitive.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Description">
            <summary>
            Gets or sets the description.
            </summary>
            <value>The description.</value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Reversed">
            <summary>
            Gets a value indicating whether this <see cref="T:CodeSmith.Engine.MapCollection"/> key value pair is reversed.
            </summary>
            <value><c>true</c> if reversed; otherwise, <c>false</c>.</value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.ReturnKeyWhenNotFound">
            <summary>
            Gets or sets a value indicating whether to return the key when its not found in the collection.
            </summary>
            <value><c>true</c> to return the key; otherwise, <c>false</c>.</value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.DefaultValue">
            <summary>
            Gets or sets the default value for when the key is not found.
            </summary>
            <value>The default value.</value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Keys">
            <summary>
            Gets an <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the keys of the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <value></value>
            <returns>An <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the keys of the object that implements <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Values">
            <summary>
            Gets an <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the values in the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <value></value>
            <returns>An <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the values in the object that implements <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Item(System.String)">
            <summary>
            Gets or sets the <see cref="T:System.String"/> with the specified key.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Item(System.String,System.String)">
            <summary>
            Gets the <see cref="T:System.String"/> with the specified key.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.Count">
            <summary>
            Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"></see>.
            </summary>
            <value></value>
            <returns>The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#ICollection#IsSynchronized">
            <summary>
            Gets a value indicating whether access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe).
            </summary>
            <value></value>
            <returns>true if access to the <see cref="T:System.Collections.ICollection"></see> is synchronized (thread safe); otherwise, false.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#ICollection#SyncRoot">
            <summary>
            Gets an object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.
            </summary>
            <value></value>
            <returns>An object that can be used to synchronize access to the <see cref="T:System.Collections.ICollection"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#IsFixedSize">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.IDictionary"></see> object has a fixed size.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.IDictionary"></see> object has a fixed size; otherwise, false.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only; otherwise, false.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Keys">
            <summary>
            Gets an <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the keys of the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <value></value>
            <returns>An <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the keys of the object that implements <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Values">
            <summary>
            Gets an <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the values in the <see cref="T:System.Collections.Generic.IDictionary`2"></see>.
            </summary>
            <value></value>
            <returns>An <see cref="T:System.Collections.Generic.ICollection`1"></see> containing the values in the object that implements <see cref="T:System.Collections.Generic.IDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#IDictionary#Item(System.Object)">
            <summary>
            Gets or sets the <see cref="T:System.Object"/> with the specified key.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.MapCollection.System#Collections#Generic#ICollection{System#Collections#Generic#KeyValuePair{System#String@System#String}}#IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only.
            </summary>
            <value></value>
            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"></see> is read-only; otherwise, false.</returns>
        </member>
        <member name="T:CodeSmith.Engine.IMergeStrategy">
            <summary>
            This interface can be implemented to create a merge strategy.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.IMergeStrategy.Init(System.String)">
            <summary>
            Initialize the merge strategy by passing in an initialization string.
            </summary>
            <param name="init">Initialization string.</param>
        </member>
        <member name="M:CodeSmith.Engine.IMergeStrategy.Merge(CodeSmith.Engine.CodeTemplate,System.String,System.String)">
            <summary>
            Merge the template output with the existing content.
            </summary>
            <param name="context">A reference to the CodeTemplate object that called the merge strategy.</param>
            <param name="sourceContent">The source content for the merge.</param>
            <param name="templateOutput">The template output that should be merged into the source.</param>
            <returns></returns>
        </member>
        <member name="T:CodeSmith.Engine.InsertRegionMergeStrategy">
            <summary>
            This merge strategy can be used to insert the template output into a named region inside an existing file
            and preserve the rest of the content in the file.  The initialization string should be of the format:
            "RegionName=&lt;RegionName&gt;;Language=&lt;Language&gt;"
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PreserveRegionsMergeStrategy">
            <summary>
            This merge strategy can be used to preserve designated custom regions inside an existing file and
            regenerate the rest of the content in the file.  The initialization string should be of the format:
            "RegionNameRegex=&lt;RegexExpression&gt;;Language=&lt;Language&gt;"
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.Parser.BuilderCollection">
            <summary>
            Implements a strongly typed collection of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements.
            </summary>
            <remarks><para>
            <b>BuilderCollection</b> provides an <see cref="T:System.Collections.ArrayList"/>
            that is strongly typed for <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements.
            </para></remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.#ctor">
            <overloads>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> class.
            </overloads>
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> class
            that is empty and has the default initial capacity.
            </summary>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.#ctor"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> class
            that is empty and has the specified initial capacity.
            </summary>
            <param name="capacity">The number of elements that the new
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is initially capable of storing.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="capacity"/> is less than zero.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.#ctor(System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.#ctor(CodeSmith.Engine.Parser.BuilderCollection)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> class
            that contains elements copied from the specified collection and
            that has the same initial capacity as the number of elements copied.
            </summary>
            <param name="collection">The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            whose elements are copied to the new collection.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="collection"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.#ctor(System.Collections.ICollection)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.#ctor(CodeSmith.Engine.Parser.IBuilder[])">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> class
            that contains elements copied from the specified <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>
            array and that has the same initial capacity as the number of elements copied.
            </summary>
            <param name="array">An <see cref="T:System.Array"/> of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>
            elements that are copied to the new collection.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.#ctor(System.Collections.ICollection)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Add(CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Adds a <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to be added to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <returns>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> index at which the
            <paramref name="value"/> has been added.</returns>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains the specified
            <paramref name="value"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Add(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#Add(System.Object)">
            <summary>
            Adds an <see cref="T:System.Object"/> to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">
            The object to be added to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            This argument can be a null reference.
            </param>
            <returns>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> index at which the
            <paramref name="value"/> has been added.</returns>
            <exception cref="T:System.InvalidCastException"><paramref name="value"/>
            is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains the specified
            <paramref name="value"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Add(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.AddRange(CodeSmith.Engine.Parser.BuilderCollection)">
            <overloads>
            Adds a range of elements to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </overloads>
            <summary>
            Adds the elements of another collection to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="collection">The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> whose elements
            should be added to the end of the current collection.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="collection"/> is a null reference.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains one or more elements
            in the specified <paramref name="collection"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.AddRange(System.Collections.ICollection)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.AddRange(CodeSmith.Engine.Parser.IBuilder[])">
            <summary>
            Adds the elements of a <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> array
            to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="array">An <see cref="T:System.Array"/> of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements
            that should be added to the end of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains one or more elements
            in the specified <paramref name="array"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.AddRange(System.Collections.ICollection)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.BinarySearch(CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Searches the entire sorted <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> for an
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element using the default comparer
            and returns the zero-based index of the element.
            </summary>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to locate in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <returns>The zero-based index of <paramref name="value"/> in the sorted
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>, if <paramref name="value"/> is found;
            otherwise, a negative number, which is the bitwise complement of the index
            of the next element that is larger than <paramref name="value"/> or, if there
            is no larger element, the bitwise complement of <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</returns>
            <exception cref="T:System.InvalidOperationException">
            Neither <paramref name="value"/> nor the elements of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            implement the <see cref="T:System.IComparable"/> interface.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.BinarySearch(System.Int32,System.Int32,System.Object,System.Collections.IComparer)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Clear">
            <summary>
            Removes all elements from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Clear"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Clone">
            <summary>
            Creates a shallow copy of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <returns>A shallow copy of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Clone"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Contains(CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            contains the specified <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element.
            </summary>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to locate in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <returns><c>true</c> if <paramref name="value"/> is found in the
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>; otherwise, <c>false</c>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Contains(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#Contains(System.Object)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> contains the specified element.
            </summary>
            <param name="value">The object to locate in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            This argument can be a null reference.
            </param>
            <returns><c>true</c> if <paramref name="value"/> is found in the
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>; otherwise, <c>false</c>.</returns>
            <exception cref="T:System.InvalidCastException"><paramref name="value"/>
            is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Contains(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.CopyTo(CodeSmith.Engine.Parser.IBuilder[])">
            <overloads>
            Copies the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> or a portion of it to a one-dimensional array.
            </overloads>
            <summary>
            Copies the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to a one-dimensional <see cref="T:System.Array"/>
            of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements, starting at the beginning of the target array.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements copied from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            The <b>Array</b> must have zero-based indexing.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentException">
            The number of elements in the source <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is greater
            than the available space in the destination <paramref name="array"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.CopyTo(System.Array)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.CopyTo(CodeSmith.Engine.Parser.IBuilder[],System.Int32)">
            <summary>
            Copies the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to a one-dimensional <see cref="T:System.Array"/>
            of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements, starting at the specified index of the target array.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements copied from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            The <b>Array</b> must have zero-based indexing.</param>
            <param name="arrayIndex">The zero-based index in <paramref name="array"/>
            at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="arrayIndex"/> is less than zero.</exception>
            <exception cref="T:System.ArgumentException"><para>
            <paramref name="arrayIndex"/> is equal to or greater than the length of <paramref name="array"/>.
            </para><para>-or-</para><para>
            The number of elements in the source <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is greater than the
            available space from <paramref name="arrayIndex"/> to the end of the destination
            <paramref name="array"/>.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.CopyTo(System.Array)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to a one-dimensional <see cref="T:System.Array"/>,
            starting at the specified index of the target array.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements copied from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            The <b>Array</b> must have zero-based indexing.</param>
            <param name="arrayIndex">The zero-based index in <paramref name="array"/>
            at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="arrayIndex"/> is less than zero.</exception>
            <exception cref="T:System.ArgumentException"><para>
            <paramref name="array"/> is multidimensional.
            </para><para>-or-</para><para>
            <paramref name="arrayIndex"/> is equal to or greater than the length of <paramref name="array"/>.
            </para><para>-or-</para><para>
            The number of elements in the source <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is greater than the
            available space from <paramref name="arrayIndex"/> to the end of the destination
            <paramref name="array"/>.</para></exception>
            <exception cref="T:System.InvalidCastException">
            The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> type cannot be cast automatically
            to the type of the destination <paramref name="array"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.CopyTo(System.Array)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.GetEnumerator">
            <summary>
            Returns an <see cref="T:CodeSmith.Engine.Parser.BuilderCollection.IBuilderEnumerator"/> that can
            iterate through the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <returns>An <see cref="T:CodeSmith.Engine.Parser.BuilderCollection.IBuilderEnumerator"/>
            for the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.GetEnumerator"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an <see cref="T:System.Collections.IEnumerator"/> that can
            iterate through the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <returns>An <see cref="T:System.Collections.IEnumerator"/>
            for the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.GetEnumerator"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.IndexOf(CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Returns the zero-based index of the first occurrence of the specified
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to locate in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <returns>
            The zero-based index of the first occurrence of <paramref name="value"/>
            in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>, if found; otherwise, -1.
            </returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.IndexOf(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#IndexOf(System.Object)">
            <summary>
            Returns the zero-based index of the first occurrence of the specified
            <see cref="T:System.Object"/> in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">The object to locate in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            This argument can be a null reference.
            </param>
            <returns>
            The zero-based index of the first occurrence of <paramref name="value"/>
            in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>, if found; otherwise, -1.
            </returns>
            <exception cref="T:System.InvalidCastException"><paramref name="value"/>
            is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.IndexOf(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Insert(System.Int32,CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Inserts a <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element into the
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> at the specified index.
            </summary>
            <param name="index">The zero-based index at which <paramref name="value"/>
            should be inserted.</param>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to insert into the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="index"/> is greater than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains the specified
            <paramref name="value"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Insert(System.Int32,System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#Insert(System.Int32,System.Object)">
            <summary>
            Inserts an element into the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> at the specified index.
            </summary>
            <param name="index">The zero-based index at which <paramref name="value"/>
            should be inserted.</param>
            <param name="value">The object to insert into the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="index"/> is greater than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</para>
            </exception>
            <exception cref="T:System.InvalidCastException"><paramref name="value"/>
            is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> already contains the specified
            <paramref name="value"/>, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Insert(System.Int32,System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.ReadOnly(CodeSmith.Engine.Parser.BuilderCollection)">
            <summary>
            Returns a read-only wrapper for the specified <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="collection">The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to wrap.</param>
            <returns>A read-only wrapper around <paramref name="collection"/>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="collection"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.ReadOnly(System.Collections.IList)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Remove(CodeSmith.Engine.Parser.IBuilder)">
            <summary>
            Removes the first occurrence of the specified <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>
            from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> object
            to remove from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Remove(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#Remove(System.Object)">
            <summary>
            Removes the first occurrence of the specified <see cref="T:System.Object"/>
            from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="value">The object to remove from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            This argument must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.InvalidCastException"><paramref name="value"/>
            is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Remove(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.RemoveAt(System.Int32)">
            <summary>
            Removes the element at the specified index of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="index">The zero-based index of the element to remove.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="index"/> is equal to or greater than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.RemoveAt(System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Removes the specified range of elements from the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="index">The zero-based starting index of the range
            of elements to remove.</param>
            <param name="count">The number of elements to remove.</param>
            <exception cref="T:System.ArgumentException">
            <paramref name="index"/> and <paramref name="count"/> do not denote a
            valid range of elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="count"/> is less than zero.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.RemoveRange(System.Int32,System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Reverse">
            <overloads>
            Reverses the order of the elements in the 
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> or a portion of it.
            </overloads>
            <summary>
            Reverses the order of the elements in the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Reverse"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Reverse(System.Int32,System.Int32)">
            <summary>
            Reverses the order of the elements in the specified range.
            </summary>
            <param name="index">The zero-based starting index of the range
            of elements to reverse.</param>
            <param name="count">The number of elements to reverse.</param>
            <exception cref="T:System.ArgumentException">
            <paramref name="index"/> and <paramref name="count"/> do not denote a
            valid range of elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="count"/> is less than zero.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Reverse"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Sort">
            <overloads>
            Sorts the elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> or a portion of it.
            </overloads>
            <summary>
            Sorts the elements in the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            using the <see cref="T:System.IComparable"/> implementation of each element.
            </summary>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Sort"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Sort(System.Collections.IComparer)">
            <summary>
            Sorts the elements in the entire <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            using the specified <see cref="T:System.Collections.IComparer"/> interface.
            </summary>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> implementation to use when comparing elements.</para>
            <para>-or-</para>
            <para>A null reference to use the <see cref="T:System.IComparable"/> implementation 
            of each element.</para></param>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Sort"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Sort(System.Int32,System.Int32,System.Collections.IComparer)">
            <summary>
            Sorts the elements in the specified range 
            using the specified <see cref="T:System.Collections.IComparer"/> interface.
            </summary>
            <param name="index">The zero-based starting index of the range
            of elements to sort.</param>
            <param name="count">The number of elements to sort.</param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> implementation to use when comparing elements.</para>
            <para>-or-</para>
            <para>A null reference to use the <see cref="T:System.IComparable"/> implementation 
            of each element.</para></param>
            <exception cref="T:System.ArgumentException">
            <paramref name="index"/> and <paramref name="count"/> do not denote a
            valid range of elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="count"/> is less than zero.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Sort"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Synchronized(CodeSmith.Engine.Parser.BuilderCollection)">
            <summary>
            Returns a synchronized (thread-safe) wrapper
            for the specified <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <param name="collection">The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to synchronize.</param>
            <returns>
            A synchronized (thread-safe) wrapper around <paramref name="collection"/>.
            </returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="collection"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.Synchronized(System.Collections.IList)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.ToArray">
            <summary>
            Copies the elements of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to a new
            <see cref="T:System.Array"/> of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements.
            </summary>
            <returns>A one-dimensional <see cref="T:System.Array"/> of <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>
            elements containing copies of the elements of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.ToArray"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.TrimToSize">
            <summary>
            Sets the capacity to the actual number of elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>BuilderCollection</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.ArrayList.TrimToSize"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.BuilderCollection.Unique(CodeSmith.Engine.Parser.BuilderCollection)">
            <summary>
            Returns a wrapper for the specified <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            ensuring that all elements are unique.
            </summary>
            <param name="collection">The <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> to wrap.</param>    
            <returns>
            A wrapper around <paramref name="collection"/> ensuring that all elements are unique.
            </returns>
            <exception cref="T:System.ArgumentException">
            <paramref name="collection"/> contains duplicate elements.</exception>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="collection"/> is a null reference.</exception>
            <remarks><para>
            The <b>Unique</b> wrapper provides a set-like collection by ensuring
            that all elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> are unique.
            </para><para>
            <b>Unique</b> raises an <see cref="T:System.ArgumentException"/> if the specified 
            <paramref name="collection"/> contains any duplicate elements. The returned
            wrapper raises a <see cref="T:System.NotSupportedException"/> whenever the user attempts 
            to add an element that is already contained in the <b>BuilderCollection</b>.
            </para><para>
            <strong>Note:</strong> The <b>Unique</b> wrapper reflects any changes made
            to the underlying <paramref name="collection"/>, including the possible
            creation of duplicate elements. The uniqueness of all elements is therefore
            no longer assured if the underlying collection is manipulated directly.
            </para></remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.InnerArray">
            <summary>
            Gets the list of elements contained in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> instance.
            </summary>
            <value>
            A one-dimensional <see cref="T:System.Array"/> with zero-based indexing that contains all 
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> elements in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </value>
            <remarks>
            Use <b>InnerArray</b> to access the element array of a <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            instance that might be a read-only or synchronized wrapper. This is necessary because
            the element array field of wrapper classes is always a null reference.
            </remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.Capacity">
            <summary>
            Gets or sets the capacity of the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <value>The number of elements that the
            <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> can contain.</value>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <b>Capacity</b> is set to a value that is less than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</exception>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.Capacity"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.Count">
            <summary>
            Gets the number of elements contained in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <value>
            The number of elements contained in the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </value>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.Count"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.IsFixedSize">
            <summary>
            Gets a value indicating whether the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> has a fixed size.
            </summary>
            <value><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> has a fixed size;
            otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.IsFixedSize"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.
            </summary>
            <value><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only;
            otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.IsReadOnly"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.IsSynchronized">
            <summary>
            Gets a value indicating whether access to the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            is synchronized (thread-safe).
            </summary>
            <value><c>true</c> if access to the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is
            synchronized (thread-safe); otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.IsSynchronized"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.IsUnique">
            <summary>
            Gets a value indicating whether the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> 
            ensures that all elements are unique.
            </summary>
            <value>
            <c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> ensures that all 
            elements are unique; otherwise, <c>false</c>. The default is <c>false</c>.
            </value>
            <remarks>
            <b>IsUnique</b> returns <c>true</c> exactly if the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>
            is exposed through a <see cref="M:CodeSmith.Engine.Parser.BuilderCollection.Unique(CodeSmith.Engine.Parser.BuilderCollection)"/> wrapper. 
            Please refer to <see cref="M:CodeSmith.Engine.Parser.BuilderCollection.Unique(CodeSmith.Engine.Parser.BuilderCollection)"/> for details.
            </remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.Item(System.Int32)">
            <summary>
            Gets or sets the <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element at the specified index.
            </summary>
            <param name="index">The zero-based index of the
            <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element to get or set.</param>
            <value>
            The <see cref="T:CodeSmith.Engine.Parser.IBuilder"/> element at the specified <paramref name="index"/>.
            </value>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="index"/> is equal to or greater than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</para>
            </exception>
            <exception cref="T:System.NotSupportedException"><para>
            The property is set and the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.
            </para><para>-or-</para><para>
            The property is set, the <b>BuilderCollection</b> already contains the
            specified element at a different index, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.Item(System.Int32)"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.System#Collections#IList#Item(System.Int32)">
            <summary>
            Gets or sets the element at the specified index.
            </summary>
            <param name="index">The zero-based index of the element to get or set.</param>
            <value>
            The element at the specified <paramref name="index"/>. When the property
            is set, this value must be compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.
            </value>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="index"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="index"/> is equal to or greater than <see cref="P:CodeSmith.Engine.Parser.BuilderCollection.Count"/>.</para>
            </exception>
            <exception cref="T:System.InvalidCastException">The property is set to a value
            that is not compatible with <see cref="T:CodeSmith.Engine.Parser.IBuilder"/>.</exception>
            <exception cref="T:System.NotSupportedException"><para>
            The property is set and the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/> is read-only.
            </para><para>-or-</para><para>
            The property is set, the <b>BuilderCollection</b> already contains the
            specified element at a different index, and the <b>BuilderCollection</b>
            ensures that all elements are unique.</para></exception>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.Item(System.Int32)"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.BuilderCollection.SyncRoot">
            <summary>
            Gets an object that can be used to synchronize
            access to the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </summary>
            <value>An object that can be used to synchronize
            access to the <see cref="T:CodeSmith.Engine.Parser.BuilderCollection"/>.
            </value>
            <remarks>Please refer to <see cref="P:System.Collections.ArrayList.SyncRoot"/> for details.</remarks>
        </member>
        <member name="T:CodeSmith.Engine.Parser.ICollapsibleBuilder">
            <summary>
            This is a marker interface to indicate that whitespace around this object should be removed.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Parser.RegisterTemplateBuilder.ResolveTypeFromClassName(System.Collections.Hashtable,System.String)">
            <summary>
            Looks in each referenced assembly for a certian class. When found it returns that type.
            </summary>
            <param name="assemblyDependencies">referenced assembly.</param>
            <param name="className">name of the class.</param>
            <returns>Looks in each referenced assembly for a certian class. When found it returns that type.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Parser.RegisterTemplateBuilder.CurrentDomain_ReflectionOnlyAssemblyResolve(System.Object,System.ResolveEventArgs)">
            <summary>
            How to load an assembly at runtime that is located in a folder that is not the bin folder of the application.
            
            http://support.microsoft.com/kb/837908
            </summary>
            <param name="sender"></param>
            <param name="args">args.Name is the name of the assembly needing to be resolved.</param>
            <returns>The resolved assembly or null.</returns>
        </member>
        <member name="T:CodeSmith.Engine.Parser.StringPair">
            <summary>
            Implements a strongly typed pair of one <see cref="T:System.String"/>
            key and one <see cref="T:System.String"/> value.
            </summary>
            <remarks>
            <b>StringPair</b> provides a <see cref="T:System.Collections.DictionaryEntry"/> that is strongly
            typed for <see cref="T:System.String"/> keys and <see cref="T:System.String"/> values.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.StringPair.#ctor(System.String,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.StringPair"/>
            class with the specified key and value.
            </summary>
            <param name="key">
            The <see cref="T:System.String"/> key in the key-and-value pair.</param>
            <param name="value">
            The <see cref="T:System.String"/> value in the key-and-value pair.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
        </member>
        <member name="M:CodeSmith.Engine.Parser.StringPair.op_Implicit(System.Collections.DictionaryEntry)~CodeSmith.Engine.Parser.StringPair">
            <summary>
            Converts a <see cref="T:System.Collections.DictionaryEntry"/> to a <see cref="T:CodeSmith.Engine.Parser.StringPair"/>.
            </summary>
            <param name="entry">A <see cref="T:System.Collections.DictionaryEntry"/> object to convert.</param>
            <returns>A <see cref="T:CodeSmith.Engine.Parser.StringPair"/> object that represents
            the converted <paramref name="entry"/>.</returns>
            <exception cref="T:System.InvalidCastException">
            <para><paramref name="entry"/> contains a key that is not compatible
            with <see cref="T:System.String"/>.</para>
            <para>-or-</para>
            <para><paramref name="entry"/> contains a value that is not compatible
            with <see cref="T:System.String"/>.</para>
            </exception>
        </member>
        <member name="M:CodeSmith.Engine.Parser.StringPair.op_Implicit(CodeSmith.Engine.Parser.StringPair)~System.Collections.DictionaryEntry">
            <summary>
            Converts a <see cref="T:CodeSmith.Engine.Parser.StringPair"/> to a <see cref="T:System.Collections.DictionaryEntry"/>.
            </summary>
            <param name="pair">A <see cref="T:CodeSmith.Engine.Parser.StringPair"/> object to convert.</param>
            <returns>A <see cref="T:System.Collections.DictionaryEntry"/> object that
            represents the converted <paramref name="pair"/>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.Parser.StringPair.Key">
            <summary>
            Gets or sets the <see cref="T:System.String"/> key in the key-and-value pair.
            </summary>
            <value>
            The <see cref="T:System.String"/> key in the key-and-value pair.
            The default is a null reference.
            </value>
            <exception cref="T:System.ArgumentNullException">
            <b>Key</b> is set to a null reference.</exception>
            <remarks>
            <see cref="T:CodeSmith.Engine.Parser.StringPair"/> is a value type and therefore has an implicit default
            constructor that zeroes all data members. This means that the <b>Key</b> property of
            a default-constructed <b>StringPair</b> contains a null reference by default,
            even though it is not possible to explicitly set <b>Key</b> to a null reference.
            </remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.StringPair.Value">
            <summary>
            Gets or sets the <see cref="T:System.String"/> value in the key-and-value pair.
            </summary>
            <value>
            The <see cref="T:System.String"/> value in the key-and-value pair.
            This value can be a null reference, which is also the default.
            </value>
        </member>
        <member name="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary">
            <summary>
            Implements a strongly typed collection of <see cref="T:CodeSmith.Engine.Parser.StringPair"/>
            key-and-value pairs that are organized based on the hash code of the key.
            </summary>
            <remarks>
            <b>ParsedAttributeDictionary</b> provides a <see cref="T:System.Collections.Hashtable"/> that is strongly typed
            for <see cref="T:System.String"/> keys and <see cref="T:System.String"/> values.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor">
            <overloads>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class.
            </overloads>
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the default initial capacity, the default load factor,
            the default hash code provider and the default comparer.
            </summary>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.#ctor"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Collections.IHashCodeProvider,System.Collections.IComparer)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the default initial capacity, the default load factor,
            the specified hash code provider and the specified comparer.
            </summary>
            <param name="provider">
            <para>The <see cref="T:System.Collections.IHashCodeProvider"/> that supplies the hash codes
            for all keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</para>
            <para>-or-</para>
            <para>A null reference to use the default hash code provider, which is each key's
            implementation of <see cref="M:System.Object.GetHashCode"/>.</para></param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> to use to determine whether two keys are equal.</para>
            <para>-or-</para>
            <para>A null reference to use the default comparer, which is each key's
            implementation of <see cref="M:System.Object.Equals(System.Object)"/>.</para></param>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IHashCodeProvider,System.Collections.IComparer)"/> for details.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the specified initial capacity, the default load factor,
            the default hash code provider and the default comparer.
            </summary>
            <param name="capacity">The approximate number of elements that the new
            <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is initially capable of storing.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="capacity"/> is less than zero.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the specified initial capacity, the default load factor,
            the specified hash code provider and the specified comparer.
            </summary>
            <param name="capacity">The approximate number of elements that the new
            <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is initially capable of storing.</param>
            <param name="provider">
            <para>The <see cref="T:System.Collections.IHashCodeProvider"/> that supplies the hash codes
            for all keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</para>
            <para>-or-</para>
            <para>A null reference to use the default hash code provider, which is each key's
            implementation of <see cref="M:System.Object.GetHashCode"/>.</para></param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> to use to determine whether two keys are equal.</para>
            <para>-or-</para>
            <para>A null reference to use the default comparer, which is each key's
            implementation of <see cref="M:System.Object.Equals(System.Object)"/>.</para></param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="capacity"/> is less than zero.</exception>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer)"/> for details.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Int32,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the specified initial capacity, the specified load factor,
            the default hash code provider and the default comparer.
            </summary>
            <param name="capacity">The approximate number of elements that the new
            <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is initially capable of storing.</param>
            <param name="loadFactor">A number in the range from 0.1 through 1.0
            indicating the maximum ratio of elements to buckets.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="capacity"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is less than 0.1.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is greater than 1.0.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Int32,System.Single)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that is empty and has the specified initial capacity, the specified load factor,
            the specified hash code provider and the specified comparer.
            </summary>
            <param name="capacity">The approximate number of elements that the new
            <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is initially capable of storing.</param>
            <param name="loadFactor">A number in the range from 0.1 through 1.0
            indicating the maximum ratio of elements to buckets.</param>
            <param name="provider">
            <para>The <see cref="T:System.Collections.IHashCodeProvider"/> that supplies the hash codes
            for all keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</para>
            <para>-or-</para>
            <para>A null reference to use the default hash code provider, which is each key's
            implementation of <see cref="M:System.Object.GetHashCode"/>.</para></param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> to use to determine whether two keys are equal.</para>
            <para>-or-</para>
            <para>A null reference to use the default comparer, which is each key's
            implementation of <see cref="M:System.Object.Equals(System.Object)"/>.</para></param>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="capacity"/> is less than zero.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is less than 0.1.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is greater than 1.0.</para></exception>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer)"/>
            for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(CodeSmith.Engine.Parser.ParsedAttributeDictionary)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that contains elements copied from the specified dictionary and
            that has the same initial capacity as the number of elements copied, the
            default load factor, the default hash code provider and the default comparer.
            </summary>
            <param name="dictionary">The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>
            whose elements are copied to the new collection.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IDictionary)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Collections.IDictionary)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that contains elements copied from the specified <see cref="T:System.Collections.IDictionary"/>
            and that has the same initial capacity as the number of elements copied, the
            default load factor, the default hash code provider and the default comparer.
            </summary>
            <param name="dictionary">The <see cref="T:System.Collections.IDictionary"/>
            whose elements are copied to the new collection.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IDictionary)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Collections.IDictionary,System.Collections.IHashCodeProvider,System.Collections.IComparer)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that contains elements copied from the specified <see cref="T:System.Collections.IDictionary"/>
            and that has the same initial capacity as the number of elements copied, the
            default load factor, the specified hash code provider and the specified comparer.
            </summary>
            <param name="dictionary">The <see cref="T:System.Collections.IDictionary"/>
            whose elements are copied to the new collection.</param>
            <param name="provider">
            <para>The <see cref="T:System.Collections.IHashCodeProvider"/> that supplies the hash codes
            for all keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</para>
            <para>-or-</para>
            <para>A null reference to use the default hash code provider, which is each key's
            implementation of <see cref="M:System.Object.GetHashCode"/>.</para></param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> to use to determine whether two keys are equal.</para>
            <para>-or-</para>
            <para>A null reference to use the default comparer, which is each key's
            implementation of <see cref="M:System.Object.Equals(System.Object)"/>.</para></param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IDictionary,System.Collections.IHashCodeProvider,System.Collections.IComparer)"/>
            for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Collections.IDictionary,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that contains elements copied from the specified <see cref="T:System.Collections.IDictionary"/>
            and that has the same initial capacity as the number of elements copied, the
            specified load factor, the default hash code provider and the default comparer.
            </summary>
            <param name="dictionary">The <see cref="T:System.Collections.IDictionary"/>
            whose elements are copied to the new collection.</param>
            <param name="loadFactor">A number in the range from 0.1 through 1.0
            indicating the maximum ratio of elements to buckets.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="loadFactor"/> is less than 0.1.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is greater than 1.0.</para></exception>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IDictionary,System.Single)"/> for details.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.#ctor(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> class
            that contains elements copied from the specified <see cref="T:System.Collections.IDictionary"/>
            and that has the same initial capacity as the number of elements copied, the
            specified load factor, the specified hash code provider and the specified comparer.
            </summary>
            <param name="dictionary">The <see cref="T:System.Collections.IDictionary"/>
            whose elements are copied to the new collection.</param>
            <param name="loadFactor">A number in the range from 0.1 through 1.0
            indicating the maximum ratio of elements to buckets.</param>
            <param name="provider">
            <para>The <see cref="T:System.Collections.IHashCodeProvider"/> that supplies the hash codes
            for all keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</para>
            <para>-or-</para>
            <para>A null reference to use the default hash code provider, which is each key's
            implementation of <see cref="M:System.Object.GetHashCode"/>.</para></param>
            <param name="comparer">
            <para>The <see cref="T:System.Collections.IComparer"/> to use to determine whether two keys are equal.</para>
            <para>-or-</para>
            <para>A null reference to use the default comparer, which is each key's
            implementation of <see cref="M:System.Object.Equals(System.Object)"/>.</para></param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <para><paramref name="loadFactor"/> is less than 0.1.</para>
            <para>-or-</para>
            <para><paramref name="loadFactor"/> is greater than 1.0.</para></exception>
            <remarks>
            Please refer to <see cref="M:System.Collections.Hashtable.#ctor(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer)"/>
            for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Add(System.String,System.String)">
            <summary>
            Adds an element with the specified <see cref="T:System.String"/> key and
            <see cref="T:System.String"/> value to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="key">The <see cref="T:System.String"/> key of the element
            to add to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</param>
            <param name="value">The <see cref="T:System.String"/> value of the element
            to add to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.ArgumentException">
            An element with the specified <paramref name="key"/>
            already exists in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</exception>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Add(System.Object,System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Add(System.Object,System.Object)">
            <summary>
            Adds an element with the specified key and value
            to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="key">The key of the element to add to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument must be compatible with <see cref="T:System.String"/>.</param>
            <param name="value">The value of the element to add to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument must be compatible with <see cref="T:System.String"/>.
            This argument can be a null reference.
            </param>
            <exception cref="T:System.ArgumentException">
            An element with the specified <paramref name="key"/>
            already exists in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</exception>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.InvalidCastException">
            <para><paramref name="key"/> is not compatible with <see cref="T:System.String"/>.</para>
            <para>-or-</para>
            <para><paramref name="value"/> is not compatible with <see cref="T:System.String"/>.</para>
            </exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Add(System.Object,System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Clear">
            <summary>
            Removes all elements from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Clear"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Clone">
            <summary>
            Creates a shallow copy of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <returns>A shallow copy of the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Clone"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Contains(System.String)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>
            contains the specified <see cref="T:System.String"/> key.
            </summary>
            <param name="key">The <see cref="T:System.String"/> key
            to locate in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</param>
            <returns><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> contains an element
            with the specified <paramref name="key"/>; otherwise, <c>false</c>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Contains(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Contains(System.Object)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> contains the specified key.
            </summary>
            <param name="key">The key to locate in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument must be compatible with <see cref="T:System.String"/>.</param>
            <returns><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> contains an element
            with the specified <paramref name="key"/>; otherwise, <c>false</c>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.InvalidCastException"><paramref name="key"/>
            is not compatible with <see cref="T:System.String"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Contains(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.ContainsKey(System.String)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>
            contains the specified <see cref="T:System.String"/> key.
            </summary>
            <param name="key">The <see cref="T:System.String"/> key
            to locate in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</param>
            <returns><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> contains an element
            with the specified <paramref name="key"/>; otherwise, <c>false</c>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.ContainsKey(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.ContainsValue(System.String)">
            <summary>
            Determines whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>
            contains the specified <see cref="T:System.String"/> value.
            </summary>
            <param name="value">The <see cref="T:System.String"/> value
            to locate in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument can be a null reference.
            </param>
            <returns><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> contains an element
            with the specified <paramref name="value"/>; otherwise, <c>false</c>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.ContainsValue(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.CopyTo(CodeSmith.Engine.Parser.StringPair[],System.Int32)">
            <summary>
            Copies the entire <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> to a one-dimensional <see cref="T:System.Array"/> of
            <see cref="T:CodeSmith.Engine.Parser.StringPair"/> elements, starting at the specified index of the target array.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the
            <see cref="T:CodeSmith.Engine.Parser.StringPair"/> elements copied from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            The <b>Array</b> must have zero-based indexing.</param>
            <param name="arrayIndex">The zero-based index in <paramref name="array"/>
            at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="arrayIndex"/> is less than zero.</exception>
            <exception cref="T:System.ArgumentException"><para>
            <paramref name="arrayIndex"/> is equal to or greater than the length of <paramref name="array"/>.
            </para><para>-or-</para><para>
            The number of elements in the source <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is greater than
            the available space from <paramref name="arrayIndex"/> to the end of the destination
            <paramref name="array"/>.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.CopyTo(System.Array,System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies the entire <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> to a one-dimensional <see cref="T:System.Array"/>,
            starting at the specified index of the target array.
            </summary>
            <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the
            <see cref="T:CodeSmith.Engine.Parser.StringPair"/> elements copied from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            The <b>Array</b> must have zero-based indexing.</param>
            <param name="arrayIndex">The zero-based index in <paramref name="array"/>
            at which copying begins.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="array"/> is a null reference.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            <paramref name="arrayIndex"/> is less than zero.</exception>
            <exception cref="T:System.ArgumentException"><para>
            <paramref name="array"/> is multidimensional.
            </para><para>-or-</para><para>
            <paramref name="arrayIndex"/> is equal to or greater than the length of <paramref name="array"/>.
            </para><para>-or-</para><para>
            The number of elements in the source <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is greater than
            the available space from <paramref name="arrayIndex"/> to the end of the destination
            <paramref name="array"/>.</para></exception>
            <exception cref="T:System.InvalidCastException">
            The <see cref="T:CodeSmith.Engine.Parser.StringPair"/> type cannot be cast automatically
            to the type of the destination <paramref name="array"/>.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.CopyTo(System.Array,System.Int32)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.GetEnumerator">
            <summary>
            Returns an <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.StringPairEnumerator"/>
            that can iterate through the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <returns>An <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.StringPairEnumerator"/>
            for the entire <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.GetEnumerator"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#GetEnumerator">
            <summary>
            Returns an <see cref="T:System.Collections.IDictionaryEnumerator"/> that can
            iterate through the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <returns>An <see cref="T:System.Collections.IDictionaryEnumerator"/>
            for the entire <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.GetEnumerator"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an <see cref="T:System.Collections.IEnumerator"/> that can
            iterate through the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <returns>An <see cref="T:System.Collections.IEnumerator"/>
            for the entire <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</returns>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.GetEnumerator"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Remove(System.String)">
            <summary>
            Removes the element with the specified <see cref="T:System.String"/> key
            from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="key">The <see cref="T:System.String"/> key of the element
            to remove from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Remove(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Remove(System.Object)">
            <summary>
            Removes the element with the specified key
            from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="key">The key of the element to remove from the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            This argument must be compatible with <see cref="T:System.String"/>.</param>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.InvalidCastException"><paramref name="key"/>
            is not compatible with <see cref="T:System.String"/>.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Remove(System.Object)"/> for details.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.ReadOnly(CodeSmith.Engine.Parser.ParsedAttributeDictionary)">
            <summary>
            Returns a read-only wrapper for the specified <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="dictionary">The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> to wrap.</param>
            <returns>A read-only wrapper around <paramref name="dictionary"/>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <remarks>
            <b>ReadOnly</b> has the same effect as the <see cref="M:System.Collections.ArrayList.ReadOnly(System.Collections.IList)"/>
            method of the <see cref="T:System.Collections.ArrayList"/> class.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Synchronized(CodeSmith.Engine.Parser.ParsedAttributeDictionary)">
            <summary>
            Returns a synchronized (thread-safe) wrapper
            for the specified <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <param name="dictionary">The <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> to synchronize.</param>
            <returns>A synchronized (thread-safe) wrapper around <paramref name="dictionary"/>.</returns>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="dictionary"/> is a null reference.</exception>
            <remarks>Please refer to <see cref="M:System.Collections.Hashtable.Synchronized(System.Collections.Hashtable)"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Count">
            <summary>
            Gets the number of key-and-value pairs contained in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>
            The number of key-and-value pairs contained in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Count"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.IsFixedSize">
            <summary>
            Gets a value indicating whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> has a fixed size.
            </summary>
            <value><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> has a fixed size;
            otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.IsFixedSize"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.IsReadOnly">
            <summary>
            Gets a value indicating whether the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.
            </summary>
            <value><c>true</c> if the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only;
            otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.IsReadOnly"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.IsSynchronized">
            <summary>
            Gets a value indicating whether access to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>
            is synchronized (thread-safe).
            </summary>
            <value><c>true</c> if access to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is
            synchronized (thread-safe); otherwise, <c>false</c>. The default is <c>false</c>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.IsSynchronized"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Item(System.String)">
            <summary>
            Gets or sets the <see cref="T:System.String"/> value
            associated with the specified <see cref="T:System.String"/> key.
            </summary>
            <param name="key">The <see cref="T:System.String"/> key
            whose value to get or set.</param>
            <value>The <see cref="T:System.String"/> value associated with the specified
            <paramref name="key"/>. If the specified <paramref name="key"/> is not found,
            attempting to get it returns
            a null reference,
            and attempting to set it creates a new element using the specified
            <paramref name="key"/>.</value>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.NotSupportedException">
            <para>The property is set and the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The property is set, <paramref name="key"/> does not exist in the collection,
            and the <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Item(System.Object)"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Item(System.Object)">
            <summary>
            Gets or sets the value associated with the specified key.
            </summary>
            <param name="key">The key whose value to get or set.
            This argument must be compatible with <see cref="T:System.String"/>.</param>
            <value>
            The value associated with the specified <paramref name="key"/>. If the specified
            <paramref name="key"/> is not found, attempting to get it returns
            a null reference,
            and attempting to set it creates a new element using the specified <paramref name="key"/>.
            When set, this value must be compatible with <see cref="T:System.String"/>.
            </value>
            <exception cref="T:System.ArgumentNullException">
            <paramref name="key"/> is a null reference.</exception>
            <exception cref="T:System.InvalidCastException">
            <para><paramref name="key"/> is not compatible with <see cref="T:System.String"/>.</para>
            <para>-or-</para>
            <para>The property is set to a value that is not compatible with
            <see cref="T:System.String"/>.</para></exception>
            <exception cref="T:System.NotSupportedException">
            <para>The property is set and the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/> is read-only.</para>
            <para>-or-</para>
            <para>The property is set, <paramref name="key"/> does not exist in the collection,
            and the <b>ParsedAttributeDictionary</b> has a fixed size.</para></exception>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Item(System.Object)"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Keys">
            <summary>
            Gets an <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.KeyList"/> containing
            the keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>An <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.KeyList"/> containing
            the keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Keys"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Keys">
            <summary>
            Gets an <see cref="T:System.Collections.ICollection"/> containing
            the keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>An <see cref="T:System.Collections.ICollection"/> containing
            the keys in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Keys"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.SyncRoot">
            <summary>
            Gets an object that can be used to synchronize
            access to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>An object that can be used to synchronize
            access to the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.SyncRoot"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.Values">
            <summary>
            Gets an <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.ValueList"/> containing
            the values in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>An <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary.ValueList"/> containing
            the values in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Values"/> for details.</remarks>
        </member>
        <member name="P:CodeSmith.Engine.Parser.ParsedAttributeDictionary.System#Collections#IDictionary#Values">
            <summary>
            Gets an <see cref="T:System.Collections.ICollection"/> containing
            the values in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.
            </summary>
            <value>An <see cref="T:System.Collections.ICollection"/> containing
            the values in the <see cref="T:CodeSmith.Engine.Parser.ParsedAttributeDictionary"/>.</value>
            <remarks>Please refer to <see cref="P:System.Collections.Hashtable.Values"/> for details.</remarks>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BinaryPredicate`1">
            <summary>
            The BinaryPredicate delegate type  encapsulates a method that takes two
            items of the same type, and returns a boolean value representating 
            some relationship between them. For example, checking whether two
            items are equal or equivalent is one kind of binary predicate.
            </summary>
            <param name="item1">The first item.</param>
            <param name="item2">The second item.</param>
            <returns>Whether item1 and item2 satisfy the relationship that the BinaryPredicate defines.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms">
            <summary>
            Algorithms contains a number of static methods that implement
            algorithms that work on collections. Most of the methods deal with
            the standard generic collection interfaces such as IEnumerable&lt;T&gt;,
            ICollection&lt;T&gt; and IList&lt;T&gt;.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Range``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32)">
            <summary>
            Returns a view onto a sub-range of a list. Items from <paramref name="list"/> are not copied; the
            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name="list"/>
            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the 
            view, but insertions and deletions in the underlying list do not.
            </summary>
            <remarks>This method can be used to apply an algorithm to a portion of a list. For example:
            <code>Algorithms.ReverseInPlace(Algorithms.Range(list, 3, 6))</code>
            will reverse the 6 items beginning at index 3.</remarks>
            <typeparam name="T">The type of the items in the list.</typeparam>
            <param name="list">The list to view.</param>
            <param name="start">The starting index of the view.</param>
            <param name="count">The number of items in the view.</param>
            <returns>A list that is a view onto the given sub-list. </returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> + <paramref name="count"/> is greater than the
            size of <paramref name="list"/>.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Range``1(``0[],System.Int32,System.Int32)">
            <summary>
            Returns a view onto a sub-range of an array. Items from <paramref name="array"/> are not copied; the
            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to <paramref name="array"/>
            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the 
            view. After an insertion, the last item in <paramref name="array"/> "falls off the end". After a deletion, the
            last item in array becomes the default value (0 or null).
            </summary>
            <remarks>This method can be used to apply an algorithm to a portion of a array. For example:
            <code>Algorithms.ReverseInPlace(Algorithms.Range(array, 3, 6))</code>
            will reverse the 6 items beginning at index 3.</remarks>
            <param name="array">The array to view.</param>
            <param name="start">The starting index of the view.</param>
            <param name="count">The number of items in the view.</param>
            <returns>A list that is a view onto the given sub-array. </returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> + <paramref name="count"/> is greater than the
            size of <paramref name="array"/>.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.ICollection{``0})">
            <summary>
            Returns a read-only view onto a collection. The returned ICollection&lt;T&gt; interface
            only allows operations that do not change the collection: GetEnumerator, Contains, CopyTo,
            Count. The ReadOnly property returns false, indicating that the collection is read-only. All other
            methods on the interface throw a NotSupportedException.
            </summary>
            <remarks>The data in the underlying collection is not copied. If the underlying
            collection is changed, then the read-only view also changes accordingly.</remarks>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to wrap.</param>
            <returns>A read-only view onto <paramref name="collection"/>. If <paramref name="collection"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnly``1(System.Collections.Generic.IList{``0})">
            <summary>
            Returns a read-only view onto a list. The returned IList&lt;T&gt; interface
            only allows operations that do not change the list: GetEnumerator, Contains, CopyTo,
            Count, IndexOf, and the get accessor of the indexer. 
            The IsReadOnly property returns true, indicating that the list is read-only. All other
            methods on the interface throw a NotSupportedException.
            </summary>
            <remarks>The data in the underlying list is not copied. If the underlying
            list is changed, then the read-only view also changes accordingly.</remarks>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to wrap.</param>
            <returns>A read-only view onto <paramref name="list"/>. Returns null if <paramref name="list"/> is null. 
            If <paramref name="list"/> is already read-only, returns <paramref name="list"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnly``2(System.Collections.Generic.IDictionary{``0,``1})">
            <summary>
            Returns a read-only view onto a dictionary. The returned IDictionary&lt;TKey,TValue&gt; interface
            only allows operations that do not change the dictionary. 
            The IsReadOnly property returns true, indicating that the dictionary is read-only. All other
            methods on the interface throw a NotSupportedException.
            </summary>
            <remarks>The data in the underlying dictionary is not copied. If the underlying
            dictionary is changed, then the read-only view also changes accordingly.</remarks>
            <param name="dictionary">The dictionary to wrap.</param>
            <returns>A read-only view onto <paramref name="dictionary"/>. Returns null if <paramref name="dictionary"/> is null. 
            If <paramref name="dictionary"/> is already read-only, returns <paramref name="dictionary"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedAs``1(System.Collections.IEnumerable)">
            <summary>
            Given a non-generic IEnumerable interface, wrap a generic IEnumerable&lt;T&gt;
            interface around it. The generic interface will enumerate the same objects as the 
            underlying non-generic collection, but can be used in places that require a generic interface.
            The underlying non-generic collection must contain only items that
            are of type <paramref name="T"/> or a type derived from it. This method is useful
            when interfacing older, non-generic collections to newer code that uses generic interfaces.
            </summary>
            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,
            this method will first attempt to cast <paramref name="untypedCollection"/> to IEnumerable&lt;T&gt;. 
            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>
            <typeparam name="T">The item type of the wrapper collection.</typeparam>
            <param name="untypedCollection">An untyped collection. This collection should only contain
            items of type <paramref name="T"/> or a type derived from it. </param>
            <returns>A generic IEnumerable&lt;T&gt; wrapper around <paramref name="untypedCollection"/>. 
            If <paramref name="untypedCollection"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedAs``1(System.Collections.ICollection)">
            <summary>
            Given a non-generic ICollection interface, wrap a generic ICollection&lt;T&gt;
            interface around it. The generic interface will enumerate the same objects as the 
            underlying non-generic collection, but can be used in places that require a generic interface.
            The underlying non-generic collection must contain only items that
            are of type <paramref name="T"/> or a type derived from it. This method is useful
            when interfacing older, non-generic collections to newer code that uses generic interfaces.
            </summary>
            <remarks><para>Some collections implement both generic and non-generic interfaces. For efficiency,
            this method will first attempt to cast <paramref name="untypedCollection"/> to ICollection&lt;T&gt;. 
            If that succeeds, it is returned; otherwise, a wrapper object is created.</para>
            <para>Unlike the generic interface, the non-generic ICollection interfaces does
            not contain methods for adding or removing items from the collection. For this reason,
            the returned ICollection&lt;T&gt; will be read-only.</para></remarks>
            <typeparam name="T">The item type of the wrapper collection.</typeparam>
            <param name="untypedCollection">An untyped collection. This collection should only contain
            items of type <paramref name="T"/> or a type derived from it. </param>
            <returns>A generic ICollection&lt;T&gt; wrapper around <paramref name="untypedCollection"/>.
            If <paramref name="untypedCollection"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedAs``1(System.Collections.IList)">
            <summary>
            Given a non-generic IList interface, wrap a generic IList&lt;T&gt;
            interface around it. The generic interface will enumerate the same objects as the 
            underlying non-generic list, but can be used in places that require a generic interface.
            The underlying non-generic list must contain only items that
            are of type <paramref name="T"/> or a type derived from it. This method is useful
            when interfacing older, non-generic lists to newer code that uses generic interfaces.
            </summary>
            <remarks>Some collections implement both generic and non-generic interfaces. For efficiency,
            this method will first attempt to cast <paramref name="untypedList"/> to IList&lt;T&gt;. 
            If that succeeds, it is returned; otherwise, a wrapper object is created.</remarks>
            <typeparam name="T">The item type of the wrapper list.</typeparam>
            <param name="untypedList">An untyped list. This list should only contain
            items of type <paramref name="T"/> or a type derived from it. </param>
            <returns>A generic IList&lt;T&gt; wrapper around <paramref name="untypedlist"/>.
            If <paramref name="untypedlist"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.ICollection{``0})">
            <summary>
            Given a generic ICollection&lt;T&gt; interface, wrap a non-generic (untyped)
            ICollection interface around it. The non-generic interface will contain the same objects as the 
            underlying generic collection, but can be used in places that require a non-generic interface.
            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.
            </summary>
            <remarks>Many generic collections already implement the non-generic interfaces directly. This
            method will first attempt to simply cast <paramref name="typedCollection"/> to ICollection. If that
            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>
            <typeparam name="T">The item type of the underlying collection.</typeparam>
            <param name="typedCollection">A typed collection to wrap.</param>
            <returns>A non-generic ICollection wrapper around <paramref name="typedCollection"/>.
            If <paramref name="typedCollection"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Untyped``1(System.Collections.Generic.IList{``0})">
            <summary>
            Given a generic IList&lt;T&gt; interface, wrap a non-generic (untyped)
            IList interface around it. The non-generic interface will contain the same objects as the 
            underlying generic list, but can be used in places that require a non-generic interface.
            This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces.
            </summary>
            <remarks>Many generic collections already implement the non-generic interfaces directly. This
            method will first attempt to simply cast <paramref name="typedList"/> to IList. If that
            succeeds, it is returned; if it fails, then a wrapper object is created.</remarks>
            <typeparam name="T">The item type of the underlying list.</typeparam>
            <param name="typedList">A typed list to wrap.</param>
            <returns>A non-generic IList wrapper around <paramref name="typedList"/>.
            If <paramref name="typedList"/> is null, then null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadWriteList``1(``0[])">
            <summary>
            <para>Creates a read-write IList&lt;T&gt; wrapper around an array. When an array is
            implicitely converted to an IList&lt;T&gt;, changes to the items in the array cannot
            be made through the interface. This method creates a read-write IList&lt;T&gt; wrapper
            on an array that can be used to make changes to the array. </para>
            <para>Use this method when you need to pass an array to an algorithms that takes an 
            IList&lt;T&gt; and that tries to modify items in the list. Algorithms in this class generally do not
            need this method, since they have been design to operate on arrays even when they
            are passed as an IList&lt;T&gt;.</para>
            </summary>
            <remarks>Since arrays cannot be resized, inserting an item causes the last item in the array to be automatically
            removed. Removing an item causes the last item in the array to be replaced with a default value (0 or null). Clearing
            the list causes all the items to be replaced with a default value.</remarks>
            <param name="array">The array to wrap.</param>
            <returns>An IList&lt;T&gt; wrapper onto <paramref name="array"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0)">
            <summary>
            Replace all items in a collection equal to a particular value with another values, yielding another collection.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="collection">The collection to process.</param>
            <param name="itemFind">The value to find and replace within <paramref name="collection"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with the appropriate replacements made.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Replace all items in a collection equal to a particular value with another values, yielding another collection. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="collection">The collection to process.</param>
            <param name="itemFind">The value to find and replace within <paramref name="collection"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with the appropriate replacements made.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Replace``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0)">
            <summary>
            Replace all items in a collection that a predicate evalues at true with a value, yielding another collection. .
            </summary>
            <param name="collection">The collection to process.</param>
            <param name="predicate">The predicate used to evaluate items with the collection. If the predicate returns true for a particular
            item, the item is replaces with <paramref name="replaceWith"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with the appropriate replacements made.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0)">
            <summary>
            Replace all items in a list or array equal to a particular value with another value. The replacement is done in-place, changing
            the list.
            </summary>
            <remarks><para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to process.</param>
            <param name="itemFind">The value to find and replace within <paramref name="collection"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},``0,``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Replace all items in a list or array equal to a particular value with another values.
            The replacement is done in-place, changing
            the list. A passed IEqualityComparer is used to determine equality.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to process.</param>
            <param name="itemFind">The value to find and replace within <paramref name="collection"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReplaceInPlace``1(System.Collections.Generic.IList{``0},System.Predicate{``0},``0)">
            <summary>
            Replace all items in a list or array that a predicate evaluates at true with a value. The replacement is done in-place, changing
            the list.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to process.</param>
            <param name="predicate">The predicate used to evaluate items with the collection. If the predicate returns true for a particular
            item, the item is replaces with <paramref name="replaceWith"/>.</param>
            <param name="replaceWith">The new value to replace with.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items
            in the collection, all items after the first item in the run are removed. 
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="collection">The collection to process.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with consecutive duplicates removed.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items
            in the collection, all items after the first item in the run are removed. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="collection">The collection to process.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with consecutive duplicates removed.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> or <paramref name="equalityComparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicates``1(System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Remove consecutive "equal" items from a collection, yielding another collection. In each run of consecutive equal items
            in the collection, all items after the first item in the run are removed. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. </remarks>
            <param name="collection">The collection to process.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". An item <c>current</c> is removed if <c>predicate(first, current)==true</c>, where
            <c>first</c> is the first item in the group of "duplicate" items.</param>
            <returns>An new collection with the items from <paramref name="collection"/>, in the same order, 
            with consecutive "duplicates" removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0})">
            <summary>
            Remove consecutive equal items from a list or array. In each run of consecutive equal items
            in the list, all items after the first item in the run are removed. The removal is done in-place, changing
            the list. 
            </summary>
            <remarks><para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to process.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Remove subsequent consecutive equal items from a list or array. In each run of consecutive equal items
            in the list, all items after the first item in the run are removed.
            The replacement is done in-place, changing
            the list. A passed IEqualityComparer is used to determine equality.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to process.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveDuplicatesInPlace``1(System.Collections.Generic.IList{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Remove consecutive "equal" items from a list or array. In each run of consecutive equal items
            in the list, all items after the first item in the run are removed. The replacement is done in-place, changing
            the list. The passed BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks><para>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to process.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32)">
            <summary>
            Finds the first occurence of <paramref name="count"/> consecutive equal items in the
            list.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to examine.</param>
            <param name="count">The number of consecutive equal items to look for. The count must be at least 1.</param>
            <returns>The index of the first item in the first run of <paramref name="count"/> consecutive equal items, or -1 if no such run exists..</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Finds the first occurence of <paramref name="count"/> consecutive equal items in the
            list. A passed IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to examine.</param>
            <param name="count">The number of consecutive equal items to look for. The count must be at least 1.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>The index of the first item in the first run of <paramref name="count"/> consecutive equal items, or -1 if no such run exists.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstConsecutiveEqual``1(System.Collections.Generic.IList{``0},System.Int32,CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Finds the first occurence of <paramref name="count"/> consecutive "equal" items in the
            list. The passed BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. </remarks>
            <param name="list">The list to examine.</param>
            <param name="count">The number of consecutive equal items to look for. The count must be at least 1.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
            <returns>The index of the first item in the first run of <paramref name="count"/> consecutive equal items, or -1 if no such run exists.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstConsecutiveWhere``1(System.Collections.Generic.IList{``0},System.Int32,System.Predicate{``0})">
            <summary>
            Finds the first occurence of <paramref name="count"/> consecutive items in the
            list for which a given predicate returns true.
            </summary>
            <param name="list">The list to examine.</param>
            <param name="count">The number of consecutive items to look for. The count must be at least 1.</param>
            <param name="predicate">The predicate used to test each item.</param>
            <returns>The index of the first item in the first run of <paramref name="count"/> items where <paramref name="predicate"/>
            returns true for all items in the run, or -1 if no such run exists.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Finds the first item in a collection that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <remarks>If the default value for T could be present in the collection, and 
            would be matched by the predicate, then this method is inappropriate, because
            you cannot disguish whether the default value for T was actually present in the collection,
            or no items matched the predicate. In this case, use TryFindFirstWhere.</remarks>
            <param name="collection">The collection to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The first item in the collection that matches the condition, or the default value for T (0 or null) if no
            item that matches the condition is found.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TryFindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)">
            <summary>
            Finds the first item in a collection that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="collection">The collection to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="foundItem">Outputs the first item in the collection that matches the condition, if the method returns true.</param>
            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.FindFirstWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Finds the last item in a collection that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <remarks><para>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a 
            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</para>
            <para>If the default value for T could be present in the collection, and 
            would be matched by the predicate, then this method is inappropriate, because
            you cannot disguish whether the default value for T was actually present in the collection,
            or no items matched the predicate. In this case, use TryFindFirstWhere.</para></remarks>
            <param name="collection">The collection to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The last item in the collection that matches the condition, or the default value for T (0 or null) if no
            item that matches the condition is found.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TryFindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0},``0@)">
            <summary>
            Finds the last item in a collection that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <remarks>If the collection implements IList&lt;T&gt;, then the list is scanned in reverse until a 
            matching item is found. Otherwise, the entire collection is iterated in the forward direction.</remarks>
            <param name="collection">The collection to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="foundItem">Outputs the last item in the collection that matches the condition, if the method returns true.</param>
            <returns>True if an item satisfying the condition was found. False if no such item exists in the collection.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.FindLastWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Enumerates all the items in <paramref name="collection"/> that satisfy the condition defined
            by <paramref name="predicate"/>.
            </summary>
            <param name="collection">The collection to check all the items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindFirstIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})">
            <summary>
            Finds the index of the first item in a list that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="list">The list to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the first item satisfying the condition. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindLastIndexWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})">
            <summary>
            Finds the index of the last item in a list that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="list">The list to search.</param>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the last item satisfying the condition. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FindIndicesWhere``1(System.Collections.Generic.IList{``0},System.Predicate{``0})">
            <summary>
            Enumerates the indices of all the items in <paramref name="list"/> that satisfy the condition defined
            by <paramref name="predicate"/>.
            </summary>
            <param name="list">The list to check all the items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items that satisfy the condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0)">
            <summary>
            Finds the index of the first item in a list equal to a given item.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <returns>The index of the first item equal to <paramref name="item"/>. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Finds the index of the first item in a list equal to a given item. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>The index of the first item equal to <paramref name="item"/>. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0)">
            <summary>
            Finds the index of the last item in a list equal to a given item.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <returns>The index of the last item equal to <paramref name="item"/>. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LastIndexOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Finds the index of the last item in a list equal to a given item. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>The index of the last item equal to <paramref name="item"/>. -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0)">
            <summary>
            Enumerates the indices of all the items in a list equal to a given item.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name="item"/>. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndicesOf``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Enumerates the indices of all the items in a list equal to a given item. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to <paramref name="item"/>. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Finds the index of the first item in a list equal to one of several given items.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <returns>The index of the first item equal to any of the items in the collection <paramref name="itemsToLookFor"/>. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Finds the index of the first item in a list equal to one of several given items. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode methods will be called.</param>
            <returns>The index of the first item equal to any of the items in the collection <paramref name="itemsToLookFor"/>. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FirstIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Finds the index of the first item in a list "equal" to one of several given items. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds 
            first item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name="itemsToLookFor"/></remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
            <returns>The index of the first item "equal" to any of the items in the collection <paramref name="itemsToLookFor"/>, using 
            <paramref name="BinaryPredicate"/> as the test for equality. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Finds the index of the last item in a list equal to one of several given items.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <returns>The index of the last item equal to any of the items in the collection <paramref name="itemsToLookFor"/>. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Finds the index of the last item in a list equal to one of several given items. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>
            <returns>The index of the last item equal to any of the items in the collection <paramref name="itemsToLookFor"/>. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LastIndexOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Finds the index of the last item in a list "equal" to one of several given items. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds 
            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name="itemsToLookFor"/></remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">The items to search for.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
            <returns>The index of the last item "equal" to any of the items in the collection <paramref name="itemsToLookFor"/>, using 
            <paramref name="BinaryPredicate"/> as the test for equality. 
            -1 if no such item exists in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Enumerates the indices of all the items in a list equal to one of several given items. 
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">A collection of items to search for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to
            any of the items in the collection <paramref name="itemsToLookFor"/>. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Enumerates the indices of all the items in a list equal to one of several given items. A passed
            IEqualityComparer is used to determine equality.
            </summary>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">A collection of items to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. </param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items equal to
            any of the items in the collection <paramref name="itemsToLookFor"/>. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndicesOfMany``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Enumerates the indices of all the items in a list equal to one of several given items. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds 
            last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in <paramref name="itemsToLookFor"/></remarks>
            <param name="list">The list to search.</param>
            <param name="itemsToLookFor">A collection of items to search for.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the indices of items "equal" to any of the items 
            in the collection <paramref name="itemsToLookFor"/>, using 
            <paramref name="BinaryPredicate"/> as the test for equality. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence 
            of <paramref name="list"/> matches pattern at index i if list[i] is equal to the first item
            in <paramref name="pattern"/>, list[i+1] is equal to the second item in <paramref name="pattern"/>,
            and so forth for all the items in <paramref name="pattern"/>.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="pattern">The sequence of items to search for.</param>
            <returns>The first index with <paramref name="list"/> that matches the items in <paramref name="pattern"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence 
            of <paramref name="list"/> matches pattern at index i if list[i] is "equal" to the first item
            in <paramref name="pattern"/>, list[i+1] is "equal" to the second item in <paramref name="pattern"/>,
            and so forth for all the items in <paramref name="pattern"/>. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested
            for in the pattern need not be equality. </remarks>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="pattern">The sequence of items to search for.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". </param>
            <returns>The first index with <paramref name="list"/> that matches the items in <paramref name="pattern"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SearchForSubsequence``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence 
            of <paramref name="list"/> matches pattern at index i if list[i] is equal to the first item
            in <paramref name="pattern"/>, list[i+1] is equal to the second item in <paramref name="pattern"/>,
            and so forth for all the items in <paramref name="pattern"/>. The passed 
            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="pattern">The sequence of items to search for.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. Only the Equals method will be called.</param>
            <returns>The first index with <paramref name="list"/> that matches the items in <paramref name="pattern"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Determines if one collection is a subset of another, considered as sets. The first set is a subset
            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,
            it must appear at least X times in the second set.
            </summary>
            <remarks>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsSubsetOf method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <returns>True if <paramref name="collection1"/> is a subset of <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IsSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Determines if one collection is a subset of another, considered as sets. The first set is a subset
            of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set,
            it must appear at least X times in the second set.
            </summary>
            <remarks>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsSubsetOf method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality.</param>
            <returns>True if <paramref name="collection1"/> is a subset of <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset
            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than
            the second set. If an item appears X times in the first set,
            it must appear at least X times in the second set.
            </summary>
            <remarks>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsSubsetOf method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <returns>True if <paramref name="collection1"/> is a subset of <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IsProperSubsetOf``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset
            of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than
            the second set. If an item appears X times in the first set,
            it must appear at least X times in the second set.
            </summary>
            <remarks>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsSubsetOf method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>True if <paramref name="collection1"/> is a proper subset of <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they
            have no common items.
            </summary>
            <remarks>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsDisjoint method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <returns>True if <paramref name="collection1"/> are <paramref name="collection2"/> are disjoint, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.DisjointSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Determines if two collections are disjoint, considered as sets. Two sets are disjoint if they
            have no common items.
            </summary>
            <remarks>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the IsDisjoint method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <param name="equalityComparer">The IEqualityComparerComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>True if <paramref name="collection1"/> are <paramref name="collection2"/> are disjoint, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Determines if two collections are equal, considered as sets. Two sets are equal if they
            have have the same items, with order not being significant.
            </summary>
            <remarks>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the EqualTo method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <returns>True if <paramref name="collection1"/> are <paramref name="collection2"/> are equal, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Determines if two collections are equal, considered as sets. Two sets are equal if they
            have have the same items, with order not being significant.
            </summary>
            <remarks>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the EqualTo method on that class.</para>
            </remarks>
            <param name="collection1">The first collection.</param>
            <param name="collection2">The second collection.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>True if <paramref name="collection1"/> are <paramref name="collection2"/> are equal, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Computes the set-theoretic intersection of two collections. The intersection of two sets
            is all items that appear in both of the sets. If an item appears X times in one set,
            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. 
            The source collections are not changed.
            A new collection is created with the intersection of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to intersect.</param>
            <param name="collection2">The second collection to intersect.</param>
            <returns>The intersection of the two collections, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetIntersection``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Computes the set-theoretic intersection of two collections. The intersection of two sets
            is all items that appear in both of the sets. If an item appears X times in one set,
            and Y times in the other set, the intersection contains the item Minimum(X,Y) times. 
            The source collections are not changed.
            A new collection is created with the intersection of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the Intersection or IntersectionWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to intersect.</param>
            <param name="collection2">The second collection to intersect.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>The intersection of the two collections, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Computes the set-theoretic union of two collections. The union of two sets
            is all items that appear in either of the sets. If an item appears X times in one set,
            and Y times in the other set, the union contains the item Maximum(X,Y) times. 
            The source collections are not changed.
            A new collection is created with the union of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the Union or UnionWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to union.</param>
            <param name="collection2">The second collection to union.</param>
            <returns>The union of the two collections, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetUnion``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Computes the set-theoretic union of two collections. The union of two sets
            is all items that appear in either of the sets. If an item appears X times in one set,
            and Y times in the other set, the union contains the item Maximum(X,Y) times. 
            The source collections are not changed.
            A new collection is created with the union of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the union or unionWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to union.</param>
            <param name="collection2">The second collection to union.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>The union of the two collections, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Computes the set-theoretic difference of two collections. The difference of two sets
            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,
            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). 
            The source collections are not changed.
            A new collection is created with the difference of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the Difference or DifferenceWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to difference.</param>
            <param name="collection2">The second collection to difference.</param>
            <returns>The difference of <paramref name="collection1"/> and <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Computes the set-theoretic difference of two collections. The difference of two sets
            is all items that appear in the first set, but not in the second. If an item appears X times in the first set,
            and Y times in the second set, the difference contains the item X - Y times (0 times if X &lt; Y). 
            The source collections are not changed.
            A new collection is created with the difference of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the difference or differenceWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to difference.</param>
            <param name="collection2">The second collection to difference.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>The difference of <paramref name="collection1"/> and <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets
            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,
            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. 
            The source collections are not changed.
            A new collection is created with the symmetric difference of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the SymmetricDifference or SymmetricDifferenceWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to symmetric difference.</param>
            <param name="collection2">The second collection to symmetric difference.</param>
            <returns>The symmetric difference of <paramref name="collection1"/> and <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SetSymmetricDifference``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets
            is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set,
            and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. 
            The source collections are not changed.
            A new collection is created with the symmetric difference of the collections; the order of the
            items in this collection is undefined.
            </summary>
            <remarks>
            <para>When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>If both collections are Set, Bag, OrderedSet, or OrderedBag
            collections, it is more efficient to use the symmetric difference or symmetric differenceWith methods on that class.</para>
            </remarks>
            <param name="collection1">The first collection to symmetric difference.</param>
            <param name="collection2">The second collection to symmetric difference.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals and GetHashCode member functions of this interface are called.</param>
            <returns>The symmetric difference of <paramref name="collection1"/> and <paramref name="collection2"/>, considered as sets.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/> or <paramref name="collection2"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.CartesianProduct``2(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1})">
            <summary>
            Computes the cartestian product of two collections: all possible pairs of items, with the first item taken from the first collection and 
            the second item taken from the second collection. If the first collection has N items, and the second collection has M items, the cartesian
            product will have N * M pairs.
            </summary>
            <typeparam name="TFirst">The type of items in the first collection.</typeparam>
            <typeparam name="TSecond">The type of items in the second collection.</typeparam>
            <param name="first">The first collection.</param>
            <param name="second">The second collection.</param>
            <returns>An IEnumerable&lt;Pair&lt;TFirst, TSecond&gt;&gt; that enumerates the cartesian product of the two collections.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Gets a string representation of the elements in the collection.
            The string representation starts with "{", has a list of items separated
            by commas (","), and ends with "}". Each item in the collection is 
            converted to a string by calling its ToString method (null is represented by "null").
            Contained collections (except strings) are recursively converted to strings by this method.
            </summary>
            <param name="collection">A collection to get the string representation of.</param>
            <returns>The string representation of the collection. If <paramref name="collection"/> is null, then the string "null" is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ToString``1(System.Collections.Generic.IEnumerable{``0},System.Boolean,System.String,System.String,System.String)">
            <summary>
            Gets a string representation of the elements in the collection.
            The string to used at the beginning and end, and to separate items,
            and supplied by parameters. Each item in the collection is 
            converted to a string by calling its ToString method (null is represented by "null").
            </summary>
            <param name="collection">A collection to get the string representation of.</param>
            <param name="recursive">If true, contained collections (except strings) are converted to strings by a recursive call to this method, instead
            of by calling ToString.</param>
            <param name="start">The string to appear at the beginning of the output string.</param>
            <param name="separator">The string to appear between each item in the string.</param>
            <param name="end">The string to appear at the end of the output string.</param>
            <returns>The string representation of the collection. If <paramref name="collection"/> is null, then the string "null" is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="start"/>, <paramref name="separator"/>, or <paramref name="end"/>
             is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ToString``2(System.Collections.Generic.IDictionary{``0,``1})">
            <summary>
            Gets a string representation of the mappings in a dictionary.
            The string representation starts with "{", has a list of mappings separated
            by commas (", "), and ends with "}". Each mapping is represented
            by "key->value". Each key and value in the dictionary is 
            converted to a string by calling its ToString method (null is represented by "null").
            Contained collections (except strings) are recursively converted to strings by this method.
            </summary>
            <param name="dictionary">A dictionary to get the string representation of.</param>
            <returns>The string representation of the collection, or "null" 
            if <paramref name="dictionary"/> is null.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetRandomGenerator">
            <summary>
            Return a private random number generator to use if the user
            doesn't supply one.
            </summary>
            <returns>The private random number generator. Only one is ever created
            and is always returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Randomly shuffles the items in a collection, yielding a new collection.
            </summary>
            <typeparam name="T">The type of the items in the collection.</typeparam>
            <param name="collection">The collection to shuffle.</param>
            <returns>An array with the same size and items as <paramref name="collection"/>, but the items in a randomly chosen order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomShuffle``1(System.Collections.Generic.IEnumerable{``0},System.Random)">
            <summary>
            Randomly shuffles the items in a collection, yielding a new collection.
            </summary>
            <typeparam name="T">The type of the items in the collection.</typeparam>
            <param name="collection">The collection to shuffle.</param>
            <param name="randomGenerator">The random number generator to use to select the random order.</param>
            <returns>An array with the same size and items as <paramref name="collection"/>, but the items in a randomly chosen order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0})">
            <summary>
            Randomly shuffles the items in a list or array, in place.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to shuffle.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomShuffleInPlace``1(System.Collections.Generic.IList{``0},System.Random)">
            <summary>
            Randomly shuffles the items in a list or array, in place.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to shuffle.</param>
            <param name="randomGenerator">The random number generator to use to select the random order.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32)">
            <summary>
            Picks a random subset of <paramref name="count"/> items from <paramref name="collection"/>, and places
            those items into a random order. No item is selected more than once.
            </summary>
            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name="count"/>).
            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection of items to select from. This collection is not changed.</param>
            <param name="count">The number of items in the subset to choose.</param>
            <returns>An array of <paramref name="count"/> items, selected at random from <paramref name="collection"/>.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative or greater than <paramref name="collection"/>.Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RandomSubset``1(System.Collections.Generic.IEnumerable{``0},System.Int32,System.Random)">
            <summary>
            Picks a random subset of <paramref name="count"/> items from <paramref name="collection"/>, and places
            those items into a random order. No item is selected more than once.
            </summary>
            <remarks>If the collection implements IList&lt;T&gt;, then this method takes time O(<paramref name="count"/>).
            Otherwise, this method takes time O(N), where N is the number of items in the collection.</remarks>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection of items to select from. This collection is not changed.</param>
            <param name="count">The number of items in the subset to choose.</param>
            <param name="randomGenerator">The random number generates used to make the selection.</param>
            <returns>An array of <paramref name="count"/> items, selected at random from <paramref name="collection"/>.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative or greater than <paramref name="list"/>.Count.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="randomGenerator"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GeneratePermutations``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Generates all the possible permutations of the items in <paramref name="collection"/>. If <paramref name="collection"/>
            has N items, then N factorial permutations will be generated. This method does not compare the items to determine if
            any of them are equal. If some items are equal, the same permutation may be generated more than once. For example,
            if the collections contains the three items A, A, and B, then this method will generate the six permutations, AAB, AAB,
            ABA, ABA, BAA, BAA (not necessarily in that order). To take equal items into account, use the GenerateSortedPermutations
            method.
            </summary>
            <typeparam name="T">The type of items to permute.</typeparam>
            <param name="collection">The collection of items to permute.</param>
            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the 
            items in <paramref name="collection"/>. Each permutations is returned as an array. The items in the array
            should be copied if they need to be used after the next permutation is generated; each permutation may
            reuse the same array instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Generates all the possible permutations of the items in <paramref name="collection"/>, in lexicographical order. 
            Even if some items are equal, the same permutation will not be generated more than once. For example,
            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,
            BAA. 
            </summary>
            <typeparam name="T">The type of items to permute.</typeparam>
            <param name="collection">The collection of items to permute.</param>
            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the 
            items in <paramref name="collection"/>. Each permutations is returned as an array. The items in the array
            should be copied if they need to be used after the next permutation is generated; each permutation may
            reuse the same array instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Generates all the possible permutations of the items in <paramref name="collection"/>, in lexicographical order. A
            supplied IComparer&lt;T&gt; instance is used to compare the items.
            Even if some items are equal, the same permutation will not be generated more than once. For example,
            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,
            BAA. 
            </summary>
            <typeparam name="T">The type of items to permute.</typeparam>
            <param name="collection">The collection of items to permute.</param>
            <param name="comparer">The IComparer&lt;T&gt; used to compare the items.</param>
            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the 
            items in <paramref name="collection"/>. Each permutations is returned as an array. The items in the array
            should be copied if they need to be used after the next permutation is generated; each permutation may
            reuse the same array instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GenerateSortedPermutations``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Generates all the possible permutations of the items in <paramref name="collection"/>, in lexicographical order. A
            supplied Comparison&lt;T&gt; delegate is used to compare the items.
            Even if some items are equal, the same permutation will not be generated more than once. For example,
            if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA,
            BAA. 
            </summary>
            <typeparam name="T">The type of items to permute.</typeparam>
            <param name="collection">The collection of items to permute.</param>
            <param name="comparison">The Comparison&lt;T&gt; delegate used to compare the items.</param>
            <returns>An IEnumerable&lt;T[]&gt; that enumerations all the possible permutations of the 
            items in <paramref name="collection"/>. Each permutations is returned as an array. The items in the array
            should be copied if they need to be used after the next permutation is generated; each permutation may
            reuse the same array instance.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Finds the maximum value in a collection.
            </summary>
            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <returns>The largest item in the collection. </returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Finds the maximum value in a collection. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <param name="comparer">The comparer instance used to compare items in the collection.</param>
            <returns>The largest item in the collection.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> or <paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Maximum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Finds the maximum value in a collection. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <param name="comparison">The comparison used to compare items in the collection.</param>
            <returns>The largest item in the collection.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> or <paramref name="comparison"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Finds the minimum value in a collection.
            </summary>
            <remarks>Values in the collection are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <returns>The smallest item in the collection.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Finds the minimum value in a collection. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <param name="comparer">The comparer instance used to compare items in the collection.</param>
            <returns>The smallest item in the collection.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> or <paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Minimum``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Finds the minimum value in a collection. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the collection.</typeparam>
            <param name="collection">The collection to search.</param>
            <param name="comparison">The comparison used to compare items in the collection.</param>
            <returns>The smallest item in the collection.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> or <paramref name="comparison"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0})">
            <summary>
            Finds the index of the maximum value in a list.
            </summary>
            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <returns>The index of the largest item in the list. If the maximum value appears
            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Finds the index of the maximum value in a list. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection. 
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="comparer">The comparer instance used to compare items in the collection.</param>
            <returns>The index of the largest item in the list. If the maximum value appears
            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> or <paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMaximum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})">
            <summary>
            Finds the index of the maximum value in a list. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="comparison">The comparison used to compare items in the collection.</param>
            <returns>The index of the largest item in the list. If the maximum value appears
            multiple times, the index of the first appearance is used. If the list is empty, -1 is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> or <paramref name="comparison"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0})">
            <summary>
            Finds the index of the minimum value in a list.
            </summary>
            <remarks>Values in the list are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <returns>The index of the smallest item in the list. If the minimum value appears
            multiple times, the index of the first appearance is used.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Finds the index of the minimum value in a list. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection. 
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="comparer">The comparer instance used to compare items in the collection.</param>
            <returns>The index of the smallest item in the list. If the minimum value appears
            multiple times, the index of the first appearance is used.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> or <paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.IndexOfMinimum``1(System.Collections.Generic.IList{``0},System.Comparison{``0})">
            <summary>
            Finds the index of the minimum value in a list. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to search.</param>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
            <returns>The index of the smallest item in the list. If the minimum value appears
            multiple times, the index of the first appearance is used.</returns>
            <exception cref="T:System.InvalidOperationException">The collection is empty.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> or <paramref name="comparison"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Creates a sorted version of a collection.
            </summary>
            <remarks>Values are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <param name="collection">The collection to sort.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Creates a sorted version of a collection. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection. 
            </summary>
            <param name="collection">The collection to sort.</param>
            <param name="comparer">The comparer instance used to compare items in the collection. Only
            the Compare method is used.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Sort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Creates a sorted version of a collection. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <param name="collection">The collection to sort.</param>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0})">
            <summary>
            Sorts a list or array in place.
            </summary>
            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</para>
            <para>Values are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to sort.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Sorts a list or array in place. A supplied IComparer&lt;T&gt; is used
            to compare the items in the list. 
            </summary>
            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to sort.</param>
            <param name="comparer">The comparer instance used to compare items in the collection. Only
            the Compare method is used.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.SortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})">
            <summary>
            Sorts a list or array in place. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the list.
            </summary>
            <remarks><para>The Quicksort algorithms is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to sort.</param>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection.
            </summary>
            <remarks>Values are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <param name="collection">The collection to sort.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. A supplied IComparer&lt;T&gt; is used
            to compare the items in the collection. 
            </summary>
            <param name="collection">The collection to sort.</param>
            <param name="comparer">The comparer instance used to compare items in the collection. Only
            the Compare method is used.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSort``1(System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. 
            A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the collection.
            </summary>
            <remarks>Values are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</remarks>
            <param name="collection">The collection to sort.</param>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
            <returns>An array containing the sorted version of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0})">
            <summary>
            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. 
            </summary>
            <remarks><para>Values are compared by using the IComparable&lt;T&gt;
            interfaces implementation on the type T.</para>
            <para>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</para></remarks>
            <param name="list">The list or array to sort.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. 
            A supplied IComparer&lt;T&gt; is used
            to compare the items in the list. 
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to sort.</param>
            <param name="comparer">The comparer instance used to compare items in the collection. Only
            the Compare method is used.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StableSortInPlace``1(System.Collections.Generic.IList{``0},System.Comparison{``0})">
            <summary>
            Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal,
            and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. 
            A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the list.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to sort.</param>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Int32@)">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;).
            </summary>
            <param name="list">The sorted list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="index">Returns the first index at which the item can be found. If the return
            value is zero, indicating that <paramref name="item"/> was not present in the list, then this
            returns the index at which <paramref name="item"/> could be inserted to maintain the sorted
            order of the list.</param>
            <returns>The number of items equal to <paramref name="item"/> that appear in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Collections.Generic.IComparer{``0},System.Int32@)">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            by the ordering in the passed instance of IComparer&lt;T&gt;.
            </summary>
            <param name="list">The sorted list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="comparer">The comparer instance used to sort the list. Only
            the Compare method is used.</param>
            <param name="index">Returns the first index at which the item can be found. If the return
            value is zero, indicating that <paramref name="item"/> was not present in the list, then this
            returns the index at which <paramref name="item"/> could be inserted to maintain the sorted
            order of the list.</param>
            <returns>The number of items equal to <paramref name="item"/> that appear in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.BinarySearch``1(System.Collections.Generic.IList{``0},``0,System.Comparison{``0},System.Int32@)">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            by the ordering in the passed Comparison&lt;T&gt; delegate.
            </summary>
            <param name="list">The sorted list to search.</param>
            <param name="item">The item to search for.</param>
            <param name="comparison">The comparison delegate used to sort the list.</param>
            <param name="index">Returns the first index at which the item can be found. If the return
            value is zero, indicating that <paramref name="item"/> was not present in the list, then this
            returns the index at which <paramref name="item"/> could be inserted to maintain the sorted
            order of the list.</param>
            <returns>The number of items equal to <paramref name="item"/> that appear in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IEnumerable{``0}[])">
            <summary>
            Merge several sorted collections into a single sorted collection. Each input collection must be sorted
            by the natural ordering of the type (it's implementation of IComparable&lt;T&gt;). The merging
            is stable; equal items maintain their ordering, and equal items in different collections are placed
            in the order of the collections.
            </summary>
            <param name="collections">The set of collections to merge. In many languages, this parameter
            can be specified as several individual parameters.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections
            in sorted order. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.MergeSorted``1(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IEnumerable{``0}[])">
            <summary>
            Merge several sorted collections into a single sorted collection. Each input collection must be sorted
            by the ordering in the passed instance of IComparer&lt;T&gt;. The merging
            is stable; equal items maintain their ordering, and equal items in different collections are placed
            in the order of the collections.
            </summary>
            <param name="collections">The set of collections to merge. In many languages, this parameter
            can be specified as several individual parameters.</param>
            <param name="comparer">The comparer instance used to sort the list. Only
            the Compare method is used.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections
            in sorted order. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.MergeSorted``1(System.Comparison{``0},System.Collections.Generic.IEnumerable{``0}[])">
            <summary>
            Merge several sorted collections into a single sorted collection. Each input collection must be sorted
            by the ordering in the passed Comparison&lt;T&gt; delegate. The merging
            is stable; equal items maintain their ordering, and equal items in different collections are placed
            in the order of the collections.
            </summary>
            <param name="collections">The set of collections to merge. In many languages, this parameter
            can be specified as several individual parameters.</param>
            <param name="comparison">The comparison delegate used to sort the collections.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in all the collections
            in sorted order. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Performs a lexicographical comparison of two sequences of values. A lexicographical comparison compares corresponding
            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, 
            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence
            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,
            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.
            </summary>
            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used
            to compare the items. </remarks>
            <typeparam name="T">Types of items to compare. This type must implement IComparable&lt;T&gt; to allow 
            items to be compared.</typeparam>
            <param name="sequence1">The first sequence to compare.</param>
            <param name="sequence2">The second sequence to compare.</param>
            <returns>Less than zero if <paramref name="sequence1"/> is lexicographically less than <paramref name="sequence2"/>.
            Greater than zero if <paramref name="sequence1"/> is lexicographically greater than <paramref name="sequence2"/>.
            Zero if <paramref name="sequence1"/> is equal to <paramref name="sequence2"/>.</returns>
            <exception cref="T:System.NotSupportedException">T does not implement IComparable&lt;T&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Comparison{``0})">
            <summary>
            Performs a lexicographical comparison of two sequences of values, using a supplied comparison delegate. A lexicographical comparison compares corresponding
            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, 
            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence
            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,
            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.
            </summary>
            <typeparam name="T">Types of items to compare.</typeparam>
            <param name="sequence1">The first sequence to compare.</param>
            <param name="sequence2">The second sequence to compare.</param>
            <param name="comparison">The IComparison&lt;T&gt; delegate to compare items. 
            Only the Compare member function of this interface is called.</param>
            <returns>Less than zero if <paramref name="sequence1"/> is lexicographically less than <paramref name="sequence2"/>.
            Greater than zero if <paramref name="sequence1"/> is lexicographically greater than <paramref name="sequence2"/>.
            Zero if <paramref name="sequence1"/> is equal to <paramref name="sequence2"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LexicographicalCompare``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IComparer{``0})">
            <summary>
            Performs a lexicographical comparison of two sequences of values, using a supplied comparer interface. A lexicographical comparison compares corresponding
            pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, 
            then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence
            are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other,
            but corresponding elements are all equal, then the shorter sequence is considered less than the longer one.
            </summary>
            <typeparam name="T">Types of items to compare.</typeparam>
            <param name="sequence1">The first sequence to compare.</param>
            <param name="sequence2">The second sequence to compare.</param>
            <param name="comparer">The IComparer&lt;T&gt; used to compare items. 
            Only the Compare member function of this interface is called.</param>
            <returns>Less than zero if <paramref name="sequence1"/> is lexicographically less than <paramref name="sequence2"/>.
            Greater than zero if <paramref name="sequence1"/> is lexicographically greater than <paramref name="sequence2"/>.
            Zero if <paramref name="sequence1"/> is equal to <paramref name="sequence2"/>.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="sequence1"/>, <paramref name="sequence2"/>, or 
            <paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetLexicographicalComparer``1">
            <summary>
            Creates an IComparer instance that can be used for comparing ordered
            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be used
            for collections or algorithms that use sequences of T as an item type. The Lexicographical
            ordered of sequences is for comparison.
            </summary>
            <remarks>T must implement either IComparable&lt;T&gt; and this implementation is used
            to compare the items. </remarks>
            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Collections.Generic.IComparer{``0})">
            <summary>
            Creates an IComparer instance that can be used for comparing ordered
            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses
            for collections or algorithms that use sequences of T as an item type. The Lexicographics
            ordered of sequences is for comparison.
            </summary>
            <param name="comparer">A comparer instance used to compare individual items of type T.</param>
            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetLexicographicalComparer``1(System.Comparison{``0})">
            <summary>
            Creates an IComparer instance that can be used for comparing ordered
            sequences of type T; that is IEnumerable&lt;Tgt;. This comparer can be uses
            for collections or algorithms that use sequences of T as an item type. The Lexicographics
            ordered of sequences is for comparison.
            </summary>
            <param name="comparison">A comparison delegate used to compare individual items of type T.</param>
            <returns>At IComparer&lt;IEnumerable&lt;T&gt;&gt; that compares sequences of T.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetReverseComparer``1(System.Collections.Generic.IComparer{``0})">
            <summary>
            Reverses the order of comparison of an IComparer&lt;T&gt;. The resulting comparer can be used,
            for example, to sort a collection in descending order. Equality and hash codes are unchanged.
            </summary>
            <typeparam name="T">The type of items thta are being compared.</typeparam>
            <param name="comparer">The comparer to reverse.</param>
            <returns>An IComparer&lt;T&gt; that compares items in the reverse order of <paramref name="comparer"/>.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="comparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetIdentityComparer``1">
            <summary>
            Gets an IEqualityComparer&lt;T&gt; instance that can be used to compare objects
            of type T for object identity only. Two objects compare equal only if they
            are references to the same object. 
            </summary>
            <returns>An IEqualityComparer&lt;T&gt; instance for identity comparison.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetReverseComparison``1(System.Comparison{``0})">
            <summary>
            Reverses the order of comparison of an Comparison&lt;T&gt;. The resulting comparison can be used,
            for example, to sort a collection in descending order. 
            </summary>
            <typeparam name="T">The type of items that are being compared.</typeparam>
            <param name="comparison">The comparison to reverse.</param>
            <returns>A Comparison&lt;T&gt; that compares items in the reverse order of <paramref name="comparison"/>.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="comparison"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetComparerFromComparison``1(System.Comparison{``0})">
            <summary>
            Given a comparison delegate that compares two items of type T, gets an
            IComparer&lt;T&gt; instance that performs the same comparison.
            </summary>
            <param name="comparison">The comparison delegate to use.</param>
            <returns>An IComparer&lt;T&gt; that performs the same comparing operation
            as <paramref name="comparison"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetComparisonFromComparer``1(System.Collections.Generic.IComparer{``0})">
            <summary>
            Given in IComparer&lt;T&gt; instenace that comparers two items from type T, 
            gets a Comparison delegate that performs the same comparison.
            </summary>
            <param name="comparer">The IComparer&lt;T&gt; instance to use.</param>
            <returns>A Comparison&lt;T&gt; delegate that performans the same comparing
            operation as <paramref name="comparer"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetCollectionEqualityComparer``1">
            <summary>
            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation 
            that can be used to compare collections of elements (of type T). Two collections
            of T's are equal if they have the same number of items, and corresponding 
            items are equal, considered in order. This is the same notion of equality as
            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.
            </summary>
            <example>
            The following code creates a Dictionary where the keys are a collection of strings.
            <code>
                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = 
                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;());
            </code>
            </example>
            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for 
            comparing collections of T for equality.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetCollectionEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation 
            that can be used to compare collections of elements (of type T). Two collections
            of T's are equal if they have the same number of items, and corresponding 
            items are equal, considered in order. This is the same notion of equality as
            in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>
            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>
            </summary>
            <example>
            The following code creates a Dictionary where the keys are a collection of strings, compared in a case-insensitive way
            <code>
                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = 
                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetCollectionEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));
            </code>
            </example>
            <param name="equalityComparer">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>
            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for 
            comparing collections of T for equality.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetSetEqualityComparer``1">
            <summary>
            <para>Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation 
            that can be used to compare collections of elements (of type T). Two collections
            of T's are equal if they have the same number of items, and corresponding 
            items are equal, without regard to order. This is the same notion of equality as
            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.</para>
            <para>An IEqualityComparer&lt;T&gt; is used to determine if individual T's are equal</para>
            </summary>
            <example>
            The following code creates a Dictionary where the keys are a set of strings, without regard to order
            <code>
                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = 
                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase));
            </code>
            </example>
            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for 
            comparing collections of T for equality, without regard to order.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetSetEqualityComparer``1(System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Gets an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation 
            that can be used to compare collections of elements (of type T). Two collections
            of T's are equal if they have the same number of items, and corresponding 
            items are equal, without regard to order. This is the same notion of equality as
            in Algorithms.EqualSets, but encapsulated in an IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation.
            </summary>
            <example>
            The following code creates a Dictionary where the keys are a set of strings, without regard to order
            <code>
                Dictionary&lt;IEnumerable&lt;string&gt;, int&gt; = 
                    new Dictionary&lt;IEnumerable&lt;string&gt;, int&gt;(Algorithms.GetSetEqualityComparer&lt;string&gt;());
            </code>
            </example>
            <param name="equalityComparer">An IEqualityComparer&lt;T&gt; implementation used to compare individual T's.</param>
            <returns>IEqualityComparer&lt;IEnumerable&lt;T&gt;&gt; implementation suitable for 
            comparing collections of T for equality, without regard to order.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualSets``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Exists``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Determines if a collection contains any item that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="collection">The collection to check all the items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if the collection contains one or more items that satisfy the condition
            defined by <paramref name="predicate"/>. False if the collection does not contain
            an item that satisfies <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TrueForAll``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Determines if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="collection">The collection to check all the items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>, or if the collection is empty. False if one or more items
            in the collection do not satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.CountWhere``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})">
            <summary>
            Counts the number of items in the collection that satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="collection">The collection to count items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>The number of items in the collection that satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RemoveWhere``1(System.Collections.Generic.ICollection{``0},System.Predicate{``0})">
            <summary>
            Removes all the items in the collection that satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <remarks>If the collection if an array or implements IList&lt;T&gt;, an efficient algorithm that
            compacts items is used. If not, then ICollection&lt;T&gt;.Remove is used
            to remove items from the collection. If the collection is an array or fixed-size list,
            the non-removed elements are placed, in order, at the beginning of
            the list, and the remaining list items are filled with a default value (0 or null).</remarks>
            <param name="collection">The collection to check all the items in.</param>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>Returns a collection of the items that were removed. This collection contains the
            items in the same order that they orginally appeared in <paramref name="collection"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Convert``2(System.Collections.Generic.IEnumerable{``0},System.Converter{``0,``1})">
            <summary>
            Convert a collection of items by applying a delegate to each item in the collection. The resulting collection
            contains the result of applying <paramref name="converter"/> to each item in <paramref name="sourceCollection"/>, in
            order.
            </summary>
            <typeparam name="TSource">The type of items in the collection to convert.</typeparam>
            <typeparam name="TDest">The type each item is being converted to.</typeparam>
            <param name="sourceCollection">The collection of item being converted.</param>
            <param name="converter">A delegate to the method to call, passing each item in <paramref name="sourceCollection"/>.</param>
            <returns>The resulting collection from applying <paramref name="converter"/> to each item in <paramref name="sourceCollection"/>, in
            order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="sourceCollection"/> or <paramref name="converter"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1})">
            <summary>
            Creates a delegate that converts keys to values by used a dictionary to map values. Keys
            that a not present in the dictionary are converted to the default value (zero or null).
            </summary>
            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert
            entire collections.</remarks>
            <param name="dictionary">The dictionary used to perform the conversion.</param>
            <returns>A delegate to a method that converts keys to values. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.GetDictionaryConverter``2(System.Collections.Generic.IDictionary{``0,``1},``1)">
            <summary>
            Creates a delegate that converts keys to values by used a dictionary to map values. Keys
            that a not present in the dictionary are converted to a supplied default value.
            </summary>
            <remarks>This delegate can be used as a parameter in Convert or ConvertAll methods to convert
            entire collections.</remarks>
            <param name="dictionary">The dictionary used to perform the conversion.</param>
            <param name="defaultValue">The result of the conversion for keys that are not present in the dictionary.</param>
            <returns>A delegate to a method that converts keys to values. </returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="dictionary"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
            <summary>
            Performs the specified action on each item in a collection.
            </summary>
            <param name="collection">The collection to process.</param>
            <param name="action">An Action delegate which is invoked for each item in <paramref name="collection"/>.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Partition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})">
            <summary>
            Partition a list or array based on a predicate. After partitioning, all items for which
            the predicate returned true precede all items for which the predicate returned false.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to partition.</param>
            <param name="predicate">A delegate that defines the partitioning condition.</param>
            <returns>The index of the first item in the second half of the partition; i.e., the first item for
            which <paramref name="predicate"/> returned false. If the predicate was true for all items
            in the list, list.Count is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.StablePartition``1(System.Collections.Generic.IList{``0},System.Predicate{``0})">
            <summary>
            Partition a list or array based on a predicate. After partitioning, all items for which
            the predicate returned true precede all items for which the predicate returned false. 
            The partition is stable, which means that if items X and Y have the same result from
            the predicate, and X precedes Y in the original list, X will precede Y in the 
            partitioned list.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to partition.</param>
            <param name="predicate">A delegate that defines the partitioning condition.</param>
            <returns>The index of the first item in the second half of the partition; i.e., the first item for
            which <paramref name="predicate"/> returned false. If the predicate was true for all items
            in the list, list.Count is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Concatenate``1(System.Collections.Generic.IEnumerable{``0}[])">
            <summary>
            Concatenates all the items from several collections. The collections need not be of the same type, but
            must have the same item type.
            </summary>
            <param name="collections">The set of collections to concatenate. In many languages, this parameter
            can be specified as several individual parameters.</param>
            <returns>An IEnumerable that enumerates all the items in each of the collections, in order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Determines if the two collections contain equal items in the same order. The two collections do not need
            to be of the same type; it is permissible to compare an array and an OrderedBag, for instance.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <typeparam name="T">The type of items in the collections.</typeparam>
            <param name="collection1">The first collection to compare.</param>
            <param name="collection2">The second collection to compare.</param>
            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Determines if the two collections contain equal items in the same order. The passed 
            instance of IEqualityComparer&lt;T&gt; is used for determining if two items are equal.
            </summary>
            <typeparam name="T">The type of items in the collections.</typeparam>
            <param name="collection1">The first collection to compare.</param>
            <param name="collection2">The second collection to compare.</param>
            <param name="equalityComparer">The IEqualityComparer&lt;T&gt; used to compare items for equality. 
            Only the Equals member function of this interface is called.</param>
            <returns>True if the collections have equal items in the same order. If both collections are empty, true is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/>, <paramref name="collection2"/>, or
            <paramref name="equalityComparer"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.EqualCollections``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},CodeSmith.Engine.PowerCollections.BinaryPredicate{``0})">
            <summary>
            Determines if the two collections contain "equal" items in the same order. The passed 
            BinaryPredicate is used to determine if two items are "equal".
            </summary>
            <remarks>Since an arbitrary BinaryPredicate is passed to this function, what is being tested
            for need not be equality. For example, the following code determines if each integer in
            list1 is less than or equal to the corresponding integer in list2.
            <code>
            List&lt;int&gt; list1, list2;
            if (EqualCollections(list1, list2, delegate(int x, int y) { return x &lt;= y; }) {
                // the check is true...
            }
            </code>
            </remarks>
            <typeparam name="T">The type of items in the collections.</typeparam>
            <param name="collection1">The first collection to compare.</param>
            <param name="collection2">The second collection to compare.</param>
            <param name="predicate">The BinaryPredicate used to compare items for "equality". 
            This predicate can compute any relation between two items; it need not represent equality or an equivalence relation.</param>
            <returns>True if <paramref name="predicate"/>returns true for each corresponding pair of
            items in the two collections. If both collections are empty, true is returned.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection1"/>, <paramref name="collection2"/>, or
            <paramref name="predicate"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ToArray``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Create an array with the items in a collection.
            </summary>
            <remarks>If <paramref name="collection"/> implements ICollection&lt;T&gt;T, then 
            ICollection&lt;T&gt;.CopyTo() is used to fill the array. Otherwise, the IEnumerable&lt;T&gt;.GetEnumerator()
            is used to fill the array.</remarks>
            <typeparam name="T">Element type of the collection.</typeparam>
            <param name="collection">Collection to create array from.</param>
            <returns>An array with the items from the collection, in enumeration order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Count``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Count the number of items in an IEnumerable&lt;T&gt; collection. If 
            a more specific collection type is being used, it is more efficient to use
            the Count property, if one is provided.
            </summary>
            <remarks>If the collection implements ICollection&lt;T&gt;, this method
            simply returns ICollection&lt;T&gt;.Count. Otherwise, it enumerates all items
            and counts them.</remarks>
            <param name="collection">The collection to count items in.</param>
            <returns>The number of items in the collection.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0)">
            <summary>
            Counts the number of items in the collection that are equal to <paramref name="find"/>.
            </summary>
            <remarks>The default sense of equality for T is used, as defined by T's
            implementation of IComparable&lt;T&gt;.Equals or object.Equals.</remarks>
            <param name="collection">The collection to count items in.</param>
            <param name="find">The item to compare to.</param>
            <returns>The number of items in the collection that are equal to <paramref name="find"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.CountEqual``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Counts the number of items in the collection that are equal to <paramref name="find"/>.
            </summary>
            <param name="collection">The collection to count items in.</param>
            <param name="find">The item to compare to.</param>
            <param name="equalityComparer">The comparer to use to determine if two items are equal. Only the Equals
            member function will be called.</param>
            <returns>The number of items in the collection that are equal to <paramref name="find"/>.</returns>
            <exception cref="T:System.ArgumentException"><paramref name="collection"/> or <paramref name="equalityComparer"/>
            is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.NCopiesOf``1(System.Int32,``0)">
            <summary>
            Creates an IEnumerator that enumerates a given item <paramref name="n"/> times.
            </summary>
            <example>
            The following creates a list consisting of 1000 copies of the double 1.0.
            <code>
            List&lt;double&gt; list = new List&lt;double&gt;(Algorithms.NCopiesOf(1000, 1.0));
            </code></example>
            <param name="n">The number of times to enumerate the item.</param>
            <param name="item">The item that should occur in the enumeration.</param>
            <returns>An IEnumerable&lt;T&gt; that yields <paramref name="n"/> copies
            of <paramref name="item"/>.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException">The argument <paramref name="n"/> is less than zero.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Fill``1(System.Collections.Generic.IList{``0},``0)">
            <summary>
            Replaces each item in a list with a given value. The list does not change in size.
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to modify.</param>
            <param name="value">The value to fill with.</param>
            <exception cref="T:System.ArgumentException"><paramref name="list"/> is a read-only list.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Fill``1(``0[],``0)">
            <summary>
            Replaces each item in a array with a given value. 
            </summary>
            <param name="array">The array to modify.</param>
            <param name="value">The value to fill with.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FillRange``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0)">
            <summary>
            Replaces each item in a part of a list with a given value.
            </summary>
            <typeparam name="T">The type of items in the list.</typeparam>
            <param name="list">The list to modify.</param>
            <param name="start">The index at which to start filling. The first index in the list has index 0.</param>
            <param name="count">The number of items to fill.</param>
            <param name="value">The value to fill with.</param>
            <exception cref="T:System.ArgumentException"><paramref name="list"/> is a read-only list.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative, or 
            <paramref name="start"/> + <paramref name="count"/> is greater than <paramref name="list"/>.Count.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.FillRange``1(``0[],System.Int32,System.Int32,``0)">
            <summary>
            Replaces each item in a part of a array with a given value.
            </summary>
            <param name="array">The array to modify.</param>
            <param name="start">The index at which to start filling. The first index in the array has index 0.</param>
            <param name="count">The number of items to fill.</param>
            <param name="value">The value to fill with.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative, or 
            <paramref name="start"/> + <paramref name="count"/> is greater than <paramref name="array"/>.Length.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32)">
            <summary>
            Copies all of the items from the collection <paramref name="source"/> to the list <paramref name="dest"/>, starting
            at the index <paramref name="destIndex"/>. If necessary, the size of the destination list is expanded.
            </summary>
            <param name="source">The collection that provide the source items. </param>
            <param name="dest">The list to store the items into.</param>
            <param name="destIndex">The index to begin copying items to.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Count.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32)">
            <summary>
            Copies all of the items from the collection <paramref name="source"/> to the array <paramref name="dest"/>, starting
            at the index <paramref name="destIndex"/>. 
            </summary>
            <param name="source">The collection that provide the source items. </param>
            <param name="dest">The array to store the items into.</param>
            <param name="destIndex">The index to begin copying items to.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Length.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
            <exception cref="T:System.ArgumentException">The collection has more items than will fit into the array. In this case, the array
            has been filled with as many items as fit before the exception is thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IList{``0},System.Int32,System.Int32)">
            <summary>
            Copies at most <paramref name="count"/> items from the collection <paramref name="source"/> to the list <paramref name="dest"/>, starting
            at the index <paramref name="destIndex"/>. If necessary, the size of the destination list is expanded. The source collection must not be
            the destination list or part thereof.
            </summary>
            <param name="source">The collection that provide the source items. </param>
            <param name="dest">The list to store the items into.</param>
            <param name="destIndex">The index to begin copying items to.</param>
            <param name="count">The maximum number of items to copy.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Count</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IEnumerable{``0},``0[],System.Int32,System.Int32)">
            <summary>
            Copies at most <paramref name="count"/> items from the collection <paramref name="source"/> to the array <paramref name="dest"/>, starting
            at the index <paramref name="destIndex"/>. The source collection must not be
            the destination array or part thereof.
            </summary>
            <param name="source">The collection that provide the source items. </param>
            <param name="dest">The array to store the items into.</param>
            <param name="destIndex">The index to begin copying items to.</param>
            <param name="count">The maximum number of items to copy. The array must be large enought to fit this number of items.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Length.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative or <paramref name="destIndex"/> + <paramref name="count"/>
            is greater than <paramref name="dest"/>.Length.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,System.Collections.Generic.IList{``0},System.Int32,System.Int32)">
            <summary>
            Copies <paramref name="count"/> items from the list <paramref name="source"/>, starting at the index <paramref name="sourceIndex"/>, 
            to the list <paramref name="dest"/>, starting at the index <paramref name="destIndex"/>. If necessary, the size of the destination list is expanded.
            The source and destination lists may be the same.
            </summary>
            <param name="source">The collection that provide the source items. </param>
            <param name="sourceIndex">The index within <paramref name="source"/>to begin copying items from.</param>
            <param name="dest">The list to store the items into.</param>
            <param name="destIndex">The index within <paramref name="dest"/>to begin copying items to.</param>
            <param name="count">The maximum number of items to copy.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="sourceIndex"/> is negative or 
            greater than <paramref name="source"/>.Count</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Count</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative or too large.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Copy``1(System.Collections.Generic.IList{``0},System.Int32,``0[],System.Int32,System.Int32)">
            <summary>
            Copies <paramref name="count"/> items from the list or array <paramref name="source"/>, starting at the index <paramref name="sourceIndex"/>, 
            to the array <paramref name="dest"/>, starting at the index <paramref name="destIndex"/>. 
            The source may be the same as the destination array.
            </summary>
            <param name="source">The list or array that provide the source items. </param>
            <param name="sourceIndex">The index within <paramref name="source"/>to begin copying items from.</param>
            <param name="dest">The array to store the items into.</param>
            <param name="destIndex">The index within <paramref name="dest"/>to begin copying items to.</param>
            <param name="count">The maximum number of items to copy. The destination array must be large enough to hold this many items.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="sourceIndex"/> is negative or 
            greater than <paramref name="source"/>.Count</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="destIndex"/> is negative or 
            greater than <paramref name="dest"/>.Length</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> is negative or too large.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> or <paramref name="dest"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Reverse``1(System.Collections.Generic.IList{``0})">
            <summary>
            Reverses a list and returns the reversed list, without changing the source list.
            </summary>
            <param name="source">The list to reverse.</param>
            <returns>A collection that contains the items from <paramref name="source"/> in reverse order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReverseInPlace``1(System.Collections.Generic.IList{``0})">
            <summary>
            Reverses a list or array in place.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to reverse.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
            <exception cref="T:System.ArgumentException"><paramref name="list"/> is read only.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.Rotate``1(System.Collections.Generic.IList{``0},System.Int32)">
            <summary>
            Rotates a list and returns the rotated list, without changing the source list.
            </summary>
            <param name="source">The list to rotate.</param>
            <param name="amountToRotate">The number of elements to rotate. This value can be positive or negative. 
            For example, rotating by positive 3 means that source[3] is the first item in the returned collection.
            Rotating by negative 3 means that source[source.Count - 3] is the first item in the returned collection.</param>
            <returns>A collection that contains the items from <paramref name="source"/> in rotated order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="source"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.RotateInPlace``1(System.Collections.Generic.IList{``0},System.Int32)">
            <summary>
            Rotates a list or array in place.
            </summary>
            <remarks>Although arrays cast to IList&lt;T&gt; are normally read-only, this method
            will work correctly and modify an array passed as <paramref name="list"/>.</remarks>
            <param name="list">The list or array to rotate.</param>
            <param name="amountToRotate">The number of elements to rotate. This value can be positive or negative. 
            For example, rotating by positive 3 means that list[3] is the first item in the resulting list.
            Rotating by negative 3 means that list[list.Count - 3] is the first item in the resulting list.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ListRange`1">
            <summary>
            The class that is used to implement IList&lt;T&gt; to view a sub-range
            of a list. The object stores a wrapped list, and a start/count indicating
            a sub-range of the list. Insertion/deletions through the sub-range view
            cause the count to change also; insertions and deletions directly on
            the wrapped list do not.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ListBase`1">
            <summary>
            ListBase is an abstract class that can be used as a base class for a read-write collection that needs 
            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs
            to override the following methods: Count, Clear, Insert, RemoveAt, and the indexer. The implementation
            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.
            </summary>
            <typeparam name="T"></typeparam>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.CollectionBase`1">
            <summary>
            CollectionBase is a base class that can be used to more easily implement the
            generic ICollection&lt;T&gt; and non-generic ICollection interfaces.
            </summary>
            <remarks>
            <para>To use CollectionBase as a base class, the derived class must override
            the Count, GetEnumerator, Add, Clear, and Remove methods. </para>
            <para>ICollection&lt;T&gt;.Contains need not be implemented by the
            derived class, but it should be strongly considered, because the CollectionBase implementation
            may not be very efficient.</para>
            </remarks>
            <typeparam name="T">The item type of the collection.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.#ctor">
            <summary>
            Creates a new CollectionBase. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.ToString">
            <summary>
            Shows the string representation of the collection. The string representation contains
            a list of the items in the collection. Contained collections (except string) are expanded
            recursively.
            </summary>
            <returns>The string representation of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.Add(`0)">
            <summary>
            Must be overridden to allow adding items to this collection.
            </summary>
            <remarks><p>This method is not abstract, although derived classes should always
            override it. It is not abstract because some derived classes may wish to reimplement
            Add with a different return type (typically bool). In C#, this can be accomplished
            with code like the following:</p>
            <code>
                public class MyCollection&lt;T&gt;: CollectionBase&lt;T&gt;, ICollection&lt;T&gt;
                {
                    public new bool Add(T item) {
                        /* Add the item */
                    }
             
                    void ICollection&lt;T&gt;.Add(T item) {
                        Add(item);
                    }
                }
            </code>
            </remarks>
            <param name="item">Item to be added to the collection.</param>
            <exception cref="T:System.NotImplementedException">Always throws this exception to indicated
            that the method must be overridden or re-implemented in the derived class.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.Clear">
            <summary>
            Must be overridden to allow clearing this collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.Remove(`0)">
            <summary>
            Must be overridden to allow removing items from this collection.
            </summary>
            <returns>True if <paramref name="item"/> existed in the collection and
            was removed. False if <paramref name="item"/> did not exist in the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.Contains(`0)">
            <summary>
            Determines if the collection contains a particular item. This default implementation
            iterates all of the items in the collection via GetEnumerator, testing each item
            against <paramref name="item"/> using IComparable&lt;T&gt;.Equals or
            Object.Equals.
            </summary>
            <remarks>You should strongly consider overriding this method to provide
            a more efficient implementation, or if the default equality comparison
            is inappropriate.</remarks>
            <param name="item">The item to check for in the collection.</param>
            <returns>True if the collection contains <paramref name="item"/>, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies all the items in the collection into an array. Implemented by
            using the enumerator returned from GetEnumerator to get all the items
            and copy them to the provided array.
            </summary>
            <param name="array">Array to copy to.</param>
            <param name="arrayIndex">Starting index in <paramref name="array"/> to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.ToArray">
            <summary>
            Creates an array of the correct size, and copies all the items in the 
            collection into the array, by calling CopyTo.
            </summary>
            <returns>An array containing all the elements in the collection, in order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.AsReadOnly">
            <summary>
            Provides a read-only view of this collection. The returned ICollection&lt;T&gt; provides
            a view of the collection that prevents modifications to the collection. Use the method to provide
            access to the collection without allowing changes. Since the returned object is just a view,
            changes to the collection will be reflected in the view.
            </summary>
            <returns>An ICollection&lt;T&gt; that provides read-only access to the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.Exists(System.Predicate{`0})">
            <summary>
            Determines if the collection contains any item that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if the collection contains one or more items that satisfy the condition
            defined by <paramref name="predicate"/>. False if the collection does not contain
            an item that satisfies <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.TrueForAll(System.Predicate{`0})">
            <summary>
            Determines if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>, or if the collection is empty. False if one or more items
            in the collection do not satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.CountWhere(System.Predicate{`0})">
            <summary>
            Counts the number of items in the collection that satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>The number of items in the collection that satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.FindAll(System.Predicate{`0})">
            <summary>
            Enumerates the items in the collection that satisfy the condition defined
            by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.RemoveAll(System.Predicate{`0})">
            <summary>
            Removes all the items in the collection that satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>Returns a collection of the items that were removed, in sorted order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.ForEach(System.Action{`0})">
            <summary>
            Performs the specified action on each item in this collection.
            </summary>
            <param name="action">An Action delegate which is invoked for each item in this collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.ConvertAll``1(System.Converter{`0,``0})">
            <summary>
            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration
            contains the result of applying <paramref name="converter"/> to each item in this collection, in
            order.
            </summary>
            <typeparam name="TOutput">The type each item is being converted to.</typeparam>
            <param name="converter">A delegate to the method to call, passing each item in this collection.</param>
            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name="converter"/> to each item in this collection in
            order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="converter"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.GetEnumerator">
            <summary>
            Must be overridden to enumerate all the members of the collection.
            </summary>
            <returns>A generic IEnumerator&lt;T&gt; that can be used
            to enumerate all the items in the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies all the items in the collection into an array. Implemented by
            using the enumerator returned from GetEnumerator to get all the items
            and copy them to the provided array.
            </summary>
            <param name="array">Array to copy to.</param>
            <param name="index">Starting index in <paramref name="array"/> to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Provides an IEnumerator that can be used to iterate all the members of the
            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden
            by the derived classes to enumerate the members of the collection.
            </summary>
            <returns>An IEnumerator that can be used to iterate the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.CollectionBase`1.DebuggerDisplayString">
            <summary>
            Display the contents of the collection in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.CollectionBase`1.Count">
            <summary>
            Must be overridden to provide the number of items in the collection.
            </summary>
            <value>The number of items in the collection.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.CollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly">
            <summary>
            Indicates whether the collection is read-only. Always returns false.
            </summary>
            <value>Always returns false.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.CollectionBase`1.System#Collections#ICollection#IsSynchronized">
            <summary>
            Indicates whether the collection is synchronized.
            </summary>
            <value>Always returns false, indicating that the collection is not synchronized.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.CollectionBase`1.System#Collections#ICollection#SyncRoot">
            <summary>
            Indicates the synchronization object for this collection.
            </summary>
            <value>Always returns this.</value>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.#ctor">
            <summary>
            Creates a new ListBase.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Clear">
            <summary>
            This method must be overridden by the derived class to empty the list
            of all items.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Insert(System.Int32,`0)">
            <summary>
            This method must be overridden by the derived class to insert a new
            item at the given index. 
            </summary>
            <param name="index">The index in the list to insert the item at. After the
            insertion, the inserted item is located at this index. The
            first item in the list has index 0.</param>
            <param name="item">The item to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.RemoveAt(System.Int32)">
            <summary>
            This method must be overridden by the derived class to remove the
            item at the given index. 
            </summary>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.GetEnumerator">
            <summary>
            Enumerates all of the items in the list, in order. The item at index 0
            is enumerated first, then the item at index 1, and so on.
            </summary>
            <remarks>The enumerator does not check for changes made
            to the structure of the list. Thus, changes to the list during
            enumeration may cause incorrect enumeration or out of range
            exceptions. Consider overriding this method and adding checks
            for structural changes.</remarks>
            <returns>An IEnumerator&lt;T&gt; that enumerates all the
            items in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Contains(`0)">
            <summary>
            Determines if the list contains any item that compares equal to <paramref name="item"/>.
            The implementation simply checks whether IndexOf(item) returns a non-negative value.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the list contains an item that compares equal to <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Add(`0)">
            <summary>
            Adds an item to the end of the list. This method is equivalent to calling: 
            <code>Insert(Count, item)</code>
            </summary>
            <param name="item">The item to add to the list.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Remove(`0)">
            <summary>
            Searches the list for the first item that compares equal to <paramref name="item"/>.
            If one is found, it is removed. Otherwise, the list is unchanged.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="item">The item to remove from the list.</param>
            <returns>True if an item was found and removed that compared equal to
            <paramref name="item"/>. False if no such item was in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.CopyTo(`0[])">
            <summary>
            Copies all the items in the list, in order, to <paramref name="array"/>,
            starting at index 0.
            </summary>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies all the items in the list, in order, to <paramref name="array"/>,
            starting at <paramref name="arrayIndex"/>.
            </summary>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count + arrayIndex.</param>
            <param name="arrayIndex">The starting index in <paramref name="array"/>
            to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)">
            <summary>
            Copies a range of elements from the list to <paramref name="array"/>,
            starting at <paramref name="arrayIndex"/>.
            </summary>
            <param name="index">The starting index in the source list of the range to copy.</param>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count + arrayIndex.</param>
            <param name="arrayIndex">The starting index in <paramref name="array"/>
            to copy to.</param>
            <param name="count">The number of items to copy.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.AsReadOnly">
            <summary>
            Provides a read-only view of this list. The returned IList&lt;T&gt; provides
            a view of the list that prevents modifications to the list. Use the method to provide
            access to the list without allowing changes. Since the returned object is just a view,
            changes to the list will be reflected in the view.
            </summary>
            <returns>An IList&lt;T&gt; that provides read-only access to the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Find(System.Predicate{`0})">
            <summary>
            Finds the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, than
            the default value for T (null or all-zero) is returned.
            </summary>
            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name="predicate"/>,
            and the list might contain the default value, then it is impossible to distinguish the different between finding
            the default value and not finding any item. To distinguish these cases, use <see cref="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)"/>.</remarks>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The first item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, the default value for T is returned.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFind(System.Predicate{`0},`0@)">
            <summary>
            Finds the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. 
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <param name="foundItem">If true is returned, this parameter receives the first item in the list
            that satifies the condition defined by <paramref name="predicate"/>.</param>
            <returns>True if an item that  satisfies the condition <paramref name="predicate"/> was found. False 
            if no item in the list satisfies that condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindLast(System.Predicate{`0})">
            <summary>
            Finds the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, than
            the default value for T (null or all-zero) is returned.
            </summary>
            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name="predicate"/>,
            and the list might contain the default value, then it is impossible to distinguish the different between finding
            the default value and not finding any item. To distinguish these cases, use <see cref="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)"/>.</remarks>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The last item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, the default value for T is returned.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.TryFindLast(System.Predicate{`0},`0@)">
            <summary>
            Finds the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. 
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <param name="foundItem">If true is returned, this parameter receives the last item in the list
            that satifies the condition defined by <paramref name="predicate"/>.</param>
            <returns>True if an item that  satisfies the condition <paramref name="predicate"/> was found. False 
            if no item in the list satisfies that condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindIndex(System.Predicate{`0})">
            <summary>
            Finds the index of the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the first item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the first item, in the range of items extending from <paramref name="index"/> to the end, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The starting index of the range to check.</param>
            <returns>The index of the first item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the first item, in the range of <paramref name="count"/> items starting from <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The starting index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the first item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindLastIndex(System.Predicate{`0})">
            <summary>
            Finds the index of the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the last item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the last item, in the range of items extending from the beginning
            of the list to <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The ending index of the range to check.</param>
            <returns>The index of the last item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the last item, in the range of <paramref name="count"/> items ending at <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The ending index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the last item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.IndexOf(`0)">
            <summary>
            Finds the index of the first item in the list that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <returns>The index of the first item in the list that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.IndexOf(`0,System.Int32)">
            <summary>
            Finds the index of the first item, in the range of items extending from <paramref name="index"/> to the end,  
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The starting index of the range to check.</param>
            <returns>The index of the first item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.IndexOf(`0,System.Int32,System.Int32)">
            <summary>
            Finds the index of the first item, in the range of <paramref name="count"/> items starting from <paramref name="index"/>,  
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The starting index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the first item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.LastIndexOf(`0)">
            <summary>
            Finds the index of the last item in the list that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <returns>The index of the last item in the list that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32)">
            <summary>
            Finds the index of the last item, in the range of items extending from the beginning
            of the list to <paramref name="index"/>, that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The ending index of the range to check.</param>
            <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.LastIndexOf(`0,System.Int32,System.Int32)">
            <summary>
            Finds the index of the last item, in the range of <paramref name="count"/> items ending at <paramref name="index"/>, 
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search for.</param>
            <param name="index">The ending index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.Range(System.Int32,System.Int32)">
            <summary>
            Returns a view onto a sub-range of this list. Items are not copied; the
            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list
            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the 
            view, but insertions and deletions in the underlying list do not.
            </summary>
            <remarks>
            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>
            <code>Algorithms.ReverseInPlace(deque.Range(3, 6))</code>
            will reverse the 6 items beginning at index 3.</remarks>
            <param name="start">The starting index of the view.</param>
            <param name="count">The number of items in the view.</param>
            <returns>A list that is a view onto the given sub-part of this list. </returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> + <paramref name="count"/> is greater than the
            size of the list.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.ConvertToItemType(System.String,System.Object)">
            <summary>
            Convert the given parameter to T. Throw an ArgumentException
            if it isn't.
            </summary>
            <param name="name">parameter name</param>
            <param name="value">parameter value</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Add(System.Object)">
            <summary>
            Adds an item to the end of the list. This method is equivalent to calling: 
            <code>Insert(Count, item)</code>
            </summary>
            <param name="value">The item to add to the list.</param>
            <exception cref="T:System.ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Clear">
            <summary>
            Removes all the items from the list, resulting in an empty list.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Contains(System.Object)">
            <summary>
            Determines if the list contains any item that compares equal to <paramref name="value"/>.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to search for.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#IndexOf(System.Object)">
            <summary>
            Find the first occurrence of an item equal to <paramref name="value"/>
            in the list, and returns the index of that item.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to search for.</param>
            <returns>The index of <paramref name="value"/>, or -1 if no item in the 
            list compares equal to <paramref name="value"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)">
            <summary>
            Insert a new
            item at the given index. 
            </summary>
            <param name="index">The index in the list to insert the item at. After the
            insertion, the inserted item is located at this index. The
            first item in the list has index 0.</param>
            <param name="value">The item to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
            <exception cref="T:System.ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Remove(System.Object)">
            <summary>
            Searches the list for the first item that compares equal to <paramref name="value"/>.
            If one is found, it is removed. Otherwise, the list is unchanged.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to remove from the list.</param>
            <exception cref="T:System.ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#RemoveAt(System.Int32)">
            <summary>
            Removes the
            item at the given index. 
            </summary>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ListBase`1.Count">
            <summary>
            The property must be overridden by the derived class to return the number of 
            items in the list.
            </summary>
            <value>The number of items in the list.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ListBase`1.Item(System.Int32)">
            <summary>
            The indexer must be overridden by the derived class to get and set
            values of the list at a particular index.
            </summary>
            <param name="index">The index in the list to get or set an item at. The
            first item in the list has index 0, and the last has index Count-1.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#IsFixedSize">
            <summary>
            Returns whether the list is a fixed size. This implementation always returns false.
            </summary>
            <value>Alway false, indicating that the list is not fixed size.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#IsReadOnly">
            <summary>
            Returns whether the list is read only. This implementation returns the value
            from ICollection&lt;T&gt;.IsReadOnly, which is by default, false.
            </summary>
            <value>By default, false, indicating that the list is not read only.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ListBase`1.System#Collections#IList#Item(System.Int32)">
            <summary>
            Gets or sets the
            value at a particular index in the list.
            </summary>
            <param name="index">The index in the list to get or set an item at. The
            first item in the list has index 0, and the last has index Count-1.</param>
            <value>The item at the given index.</value>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
            <exception cref="T:System.ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ListRange`1.#ctor(System.Collections.Generic.IList{`0},System.Int32,System.Int32)">
            <summary>
            Create a sub-range view object on the indicate part 
            of the list.
            </summary>
            <param name="wrappedList">List to wrap.</param>
            <param name="start">The start index of the view in the wrapped list.</param>
            <param name="count">The number of items in the view.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ArrayRange`1">
            <summary>
            The class that is used to implement IList&lt;T&gt; to view a sub-range
            of an array. The object stores a wrapped array, and a start/count indicating
            a sub-range of the array. Insertion/deletions through the sub-range view
            cause the count to change up to the size of the underlying array. Elements
            fall off the end of the underlying array.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ArrayRange`1.#ctor(`0[],System.Int32,System.Int32)">
            <summary>
            Create a sub-range view object on the indicate part 
            of the array.
            </summary>
            <param name="wrappedArray">Array to wrap.</param>
            <param name="start">The start index of the view in the wrapped list.</param>
            <param name="count">The number of items in the view.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyCollection`1">
            <summary>
            The read-only ICollection&lt;T&gt; implementation that is used by the ReadOnly method.
            Methods that modify the collection throw a NotSupportedException, methods that don't
            modify are fowarded through to the wrapped collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyCollection`1.#ctor(System.Collections.Generic.ICollection{`0})">
            <summary>
            Create a ReadOnlyCollection wrapped around the given collection.
            </summary>
            <param name="wrappedCollection">Collection to wrap.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyCollection`1.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyList`1">
            <summary>
            The read-only IList&lt;T&gt; implementation that is used by the ReadOnly method.
            Methods that modify the list throw a NotSupportedException, methods that don't
            modify are fowarded through to the wrapped list.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyList`1.#ctor(System.Collections.Generic.IList{`0})">
            <summary>
            Create a ReadOnlyList wrapped around the given list.
            </summary>
            <param name="wrappedList">List to wrap.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyList`1.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyDictionary`2">
            <summary>
            The private class that implements a read-only wrapped for 
            IDictionary &lt;TKey,TValue&gt;.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
            <summary>
            Create a read-only dictionary wrapped around the given dictionary.
            </summary>
            <param name="wrappedDictionary">The IDictionary&lt;TKey,TValue&gt; to wrap.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReadOnlyDictionary`2.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.TypedEnumerator`1">
            <summary>
             The class that provides a typed IEnumerator&lt;T&gt;
            view onto an untyped IEnumerator interface.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedEnumerator`1.#ctor(System.Collections.IEnumerator)">
            <summary>
            Create a typed IEnumerator&lt;T&gt;
            view onto an untyped IEnumerator interface 
            </summary>
            <param name="wrappedEnumerator">IEnumerator to wrap.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.TypedEnumerable`1">
            <summary>
            The class that provides a typed IEnumerable&lt;T&gt; view
            onto an untyped IEnumerable interface.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedEnumerable`1.#ctor(System.Collections.IEnumerable)">
            <summary>
            Create a typed IEnumerable&lt;T&gt; view
            onto an untyped IEnumerable interface.
            </summary>
            <param name="wrappedEnumerable">IEnumerable interface to wrap.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.TypedCollection`1">
            <summary>
            The class that provides a typed ICollection&lt;T&gt; view
            onto an untyped ICollection interface. The ICollection&lt;T&gt;
            is read-only.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedCollection`1.#ctor(System.Collections.ICollection)">
            <summary>
            Create a typed ICollection&lt;T&gt; view
            onto an untyped ICollection interface.
            </summary>
            <param name="wrappedCollection">ICollection interface to wrap.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedCollection`1.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.TypedList`1">
            <summary>
            The class used to create a typed IList&lt;T&gt; view onto
            an untype IList interface.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.TypedList`1.#ctor(System.Collections.IList)">
            <summary>
            Create a typed IList&lt;T&gt; view onto
            an untype IList interface.
            </summary>
            <param name="wrappedList">The IList to wrap.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.UntypedCollection`1">
            <summary>
            The class that is used to provide an untyped ICollection
            view onto a typed ICollection&lt;T&gt; interface.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.UntypedCollection`1.#ctor(System.Collections.Generic.ICollection{`0})">
            <summary>
            Create an untyped ICollection
            view onto a typed ICollection&lt;T&gt; interface.
            </summary>
            <param name="wrappedCollection">The ICollection&lt;T&gt; to wrap.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.UntypedList`1">
            <summary>
            The class that implements a non-generic IList wrapper
            around a generic IList&lt;T&gt; interface.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.UntypedList`1.#ctor(System.Collections.Generic.IList{`0})">
            <summary>
            Create a non-generic IList wrapper
            around a generic IList&lt;T&gt; interface.
            </summary>
            <param name="wrappedList">The IList&lt;T&gt; interface to wrap.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.UntypedList`1.ConvertToItemType(System.String,System.Object)">
            <summary>
            Convert the given parameter to T. Throw an ArgumentException
            if it isn't.
            </summary>
            <param name="name">parameter name</param>
            <param name="value">parameter value</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ArrayWrapper`1">
            <summary>
            The class that is used to implement IList&lt;T&gt; to view an array
            in a read-write way. Insertions cause the last item in the array
            to fall off, deletions replace the last item with the default value.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ArrayWrapper`1.#ctor(`0[])">
            <summary>
            Create a list wrapper object on an array.
            </summary>
            <param name="wrappedArray">Array to wrap.</param>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Algorithms.ArrayWrapper`1.System#Collections#IList#IsFixedSize">
            <summary>
            Return true, to indicate that the list is fixed size.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.LexicographicalComparerClass`1">
            <summary>
            A private class used by the LexicographicalComparer method to compare sequences
            (IEnumerable) of T by there Lexicographical ordering.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.LexicographicalComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new instance that comparer sequences of T by their lexicographical
            ordered.
            </summary>
            <param name="itemComparer">The IComparer used to compare individual items of type T.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.ReverseComparerClass`1">
            <summary>
            An IComparer instance that can be used to reverse the sense of 
            a wrapped IComparer instance.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Algorithms.ReverseComparerClass`1.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            </summary>
            <param name="comparer">The comparer to reverse.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.IdentityComparer`1">
            <summary>
            A class, implementing IEqualityComparer&lt;T&gt;, that compares objects
            for object identity only. Only Equals and GetHashCode can be used;
            this implementation is not appropriate for ordering.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.CollectionEqualityComparer`1">
            <summary>
            A private class used to implement GetCollectionEqualityComparer(). This
            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare
            two enumerables for equality, where order is significant.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Algorithms.SetEqualityComparer`1">
            <summary>
            A private class used to implement GetSetEqualityComparer(). This
            class implements IEqualityComparer&lt;IEnumerable&lt;T&gt;gt; to compare
            two enumerables for equality, where order is not significant.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Bag`1">
             <summary>
             Bag&lt;T&gt; is a collection that contains items of type T. 
             Unlike a Set, duplicate items (items that compare equal to each other) are allowed in an Bag. 
             </summary>
             <remarks>
             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; 
             then the Equals method of that interface will be used to compare items, otherwise the Equals
             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed
             to the constructor to use to compare items.</p>
             <p>Bag is implemented as a hash table. Inserting, deleting, and looking up an
             an element all are done in approximately constant time, regardless of the number of items in the bag.</p>
             <p>When multiple equal items are stored in the bag, they are stored as a representative item and a count. 
             If equal items can be distinguished, this may be noticable. For example, if a case-insensitive
             comparer is used with a Bag&lt;string&gt;, and both "hello", and "HELLO" are added to the bag, then the
             bag will appear to contain two copies of "hello" (the representative item).</p>
             <p><see cref="T:CodeSmith.Engine.PowerCollections.OrderedBag`1"/> is similar, but uses comparison instead of hashing, maintain
             the items in sorted order, and stores distinct copies of items that compare equal.</p>
            </remarks>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.OrderedBag`1"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.NewPair(`0,System.Int32)">
            <summary>
            Helper function to create a new KeyValuePair struct with an item and a count.
            </summary>
            <param name="item">The item.</param>
            <param name="count">The number of appearances.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.NewPair(`0)">
            <summary>
            Helper function to create a new KeyValuePair struct with a count of zero.
            </summary>
            <param name="item">The item.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.#ctor">
             <summary>
             Creates a new Bag. 
             </summary>
            <remarks>
             Items that are null are permitted.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object
            will be used to compare items in this bag for equality.
            </summary>
            <param name="equalityComparer">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
             <summary>
             Creates a new Bag. The bag is
             initialized with all the items in the given collection.
             </summary>
            <remarks>
             Items that are null are permitted.
            </remarks>
             <param name="collection">A collection with items to be placed into the Bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object
            will be used to compare items in this bag. The bag is
            initialized with all the items in the given collection.
            </summary>
            <param name="collection">A collection with items to be placed into the Bag.</param>
            <param name="equalityComparer">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.#ctor(System.Collections.Generic.IEqualityComparer{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Collections.Generic.IEqualityComparer{`0},CodeSmith.Engine.PowerCollections.Hash{System.Collections.Generic.KeyValuePair{`0,System.Int32}},System.Int32)">
            <summary>
            Creates a new Bag given a comparer and a hash that contains the data. Used
            internally for Clone.
            </summary>
            <param name="equalityComparer">IEqualityComparer for the bag.</param>
            <param name="keyEqualityComparer">IEqualityComparer for the key.</param>
            <param name="hash">Data for the bag.</param>
            <param name="count">Size of the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.System#ICloneable#Clone">
            <summary>
            Makes a shallow clone of this bag; i.e., if items of the
            bag are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>
            <returns>The cloned bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Clone">
            <summary>
            Makes a shallow clone of this bag; i.e., if items of the
            bag are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the bag takes time O(N), where N is the number of unquie items in the bag.</remarks>
            <returns>The cloned bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.CloneContents">
            <summary>
            Makes a deep clone of this bag. A new bag is created with a clone of
            each element of this bag, by calling ICloneable.Clone on each element. If T is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>
            <returns>The cloned bag.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.NumberOfCopies(`0)">
            <summary>
            Returns the number of copies of <paramref name="item"/> in the bag. 
            </summary>
            <remarks>NumberOfCopies() takes approximately constant time, no matter how many items
            are stored in the bag.</remarks>
            <param name="item">The item to search for in the bag.</param>
            <returns>The number of items in the bag that compare equal to <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.GetRepresentativeItem(`0,`0@)">
            <summary>
            Returns the representative item stored in the bag that is equal to
            the provided item. Also returns the number of copies of the item in the bag.
            </summary>
            <param name="item">Item to find in the bag.</param>
            <param name="representative">If one or more items equal to <paramref name="item"/> are present in the
            bag, returns the representative item. If no items equal to <paramref name="item"/> are stored in the bag, 
            returns <paramref name="item"/>.</param>
            <returns>The number of items equal to <paramref name="item"/> stored in the bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the items in the bag. 
            If an item is present multiple times in the bag, the representative item is yielded by the
            enumerator multiple times. The order of enumeration is haphazard and may change.
            </summary>
            <remarks>
            <p>Typically, this method is not called directly. Instead the "foreach" statement is used
            to enumerate the items, which uses this method implicitly.</p>
            <p>If an item is added to or deleted from the bag while it is being enumerated, then 
            the enumeration will end with an InvalidOperationException.</p>
            <p>Enumeration all the items in the bag takes time O(N), where N is the number
            of items in the bag.</p>
            </remarks>
            <returns>An enumerator for enumerating all the items in the Bag.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Contains(`0)">
            <summary>
            Determines if this bag contains an item equal to <paramref name="item"/>. The bag
            is not changed.
            </summary>
            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the bag contains <paramref name="item"/>. False if the bag does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.DistinctItems">
            <summary>
            Enumerates all the items in the bag, but enumerates equal items
            just once, even if they occur multiple times in the bag.
            </summary>
            <remarks>If the bag is changed while items are being enumerated, the
            enumeration will terminate with an InvalidOperationException.</remarks>
            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Add(`0)">
            <summary>
            Adds a new item to the bag. Since bags can contain duplicate items, the item 
            is added even if the bag already contains an item equal to <paramref name="item"/>. In
            this case, the count of items for the representative item is increased by one, but the existing
            represetative item is unchanged.
            </summary>
            <remarks>
            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>
            <param name="item">The item to add to the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.AddRepresentative(`0)">
            <summary>
            Adds a new item to the bag. Since bags can contain duplicate items, the item 
            is added even if the bag already contains an item equal to <paramref name="item"/>. In
            this case (unlike Add), the new item becomes the representative item.
            </summary>
            <remarks>
            <para>Adding an item takes approximately constant time, regardless of the number of items in the bag.</para></remarks>
            <param name="item">The item to add to the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.ChangeNumberOfCopies(`0,System.Int32)">
            <summary>
            Changes the number of copies of an existing item in the bag, or adds the indicated number
            of copies of the item to the bag. 
            </summary>
            <remarks>
            <para>Changing the number of copies takes approximately constant time, regardless of the number of items in the bag.</para></remarks>
            <param name="item">The item to change the number of copies of. This may or may not already be present in the bag.</param>
            <param name="numCopies">The new number of copies of the item.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.AddMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds all the items in <paramref name="collection"/> to the bag. 
            </summary>
            <remarks>
            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to add to the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Remove(`0)">
            <summary>
            Searches the bag for one item equal to <paramref name="item"/>, and if found,
            removes it from the bag. If not found, the bag is unchanged. 
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>Removing an item from the bag takes approximated constant time,
            regardless of the number of items in the bag.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.RemoveAllCopies(`0)">
            <summary>
            Searches the bag for all items equal to <paramref name="item"/>, and 
            removes all of them from the bag. If not found, the bag is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparer instance used
            to create the bag.</para>
            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is
            the number of items equal to <paramref name="item"/>.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>The number of copies of <paramref name="item"/> that were found and removed. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Removes all the items in <paramref name="collection"/> from the bag. Items that
            are not present in the bag are ignored.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparer instance used
            to create the bag.</para>
            <para>Removing the collection takes time O(M), where M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to remove from the bag.</param>
            <returns>The number of items removed from the bag.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Clear">
            <summary>
            Removes all items from the bag.
            </summary>
            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.CheckConsistentComparison(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Check that this bag and another bag were created with the same comparison
            mechanism. Throws exception if not compatible.
            </summary>
            <param name="otherBag">Other bag to check comparision mechanism.</param>
            <exception cref="T:System.InvalidOperationException">If otherBag and this bag don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsEqualTo(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is equal to another bag. This bag is equal to
            <paramref name="otherBag"/> if they contain the same number of 
            of copies of equal elements.
            </summary>
            <remarks>IsSupersetOf is computed in time O(N), where N is the number of unique items in 
            this bag.</remarks>
            <param name="otherBag">Bag to compare to</param>
            <returns>True if this bag is equal to <paramref name="otherBag"/>, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsSupersetOf(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is a superset of another bag. Neither bag is modified.
            This bag is a superset of <paramref name="otherBag"/> if every element in
            <paramref name="otherBag"/> is also in this bag, at least the same number of
            times.
            </summary>
            <remarks>IsSupersetOf is computed in time O(M), where M is the number of unique items in 
            <paramref name="otherBag"/>.</remarks>
            <param name="otherBag">Bag to compare to.</param>
            <returns>True if this is a superset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsProperSupersetOf(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is a proper superset of another bag. Neither bag is modified.
            This bag is a proper superset of <paramref name="otherBag"/> if every element in
            <paramref name="otherBag"/> is also in this bag, at least the same number of
            times. Additional, this bag must have strictly more items than <paramref name="otherBag"/>.
            </summary>
            <remarks>IsProperSupersetOf is computed in time O(M), where M is the number of unique items in 
            <paramref name="otherBag"/>.</remarks>
            <param name="otherBag">Set to compare to.</param>
            <returns>True if this is a proper superset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsSubsetOf(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is a subset of another ba11 items in this bag.
            </summary>
            <param name="otherBag">Bag to compare to.</param>
            <returns>True if this is a subset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsProperSubsetOf(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is a proper subset of another bag. Neither bag is modified.
            This bag is a subset of <paramref name="otherBag"/> if every element in this bag
            is also in <paramref name="otherBag"/>, at least the same number of
            times. Additional, this bag must have strictly fewer items than <paramref name="otherBag"/>.
            </summary>
            <remarks>IsProperSubsetOf is computed in time O(N), where N is the number of unique items in this bag.</remarks>
            <param name="otherBag">Bag to compare to.</param>
            <returns>True if this is a proper subset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IsDisjointFrom(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Determines if this bag is disjoint from another bag. Two bags are disjoint
            if no item from one set is equal to any item in the other bag.
            </summary>
            <remarks>
            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherBag">Bag to check disjointness with.</param>
            <returns>True if the two bags are disjoint, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.UnionWith(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the union of this bag with another bag. The union of two bags
            is all items from both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives
            the union of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the 
            two bags.</para>
            </remarks>
            <param name="otherBag">Bag to union with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Union(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the union of this bag with another bag. The union of two bags
            is all items from both of the bags.  If an item appears X times in one bag,
            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is 
            created with the union of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The union of two bags is computed in time O(M+N), where M and N are the size of the two bags.</para>
            </remarks>
            <param name="otherBag">Bag to union with.</param>
            <returns>The union of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.SumWith(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the sum of this bag with another bag. The sum of two bags
            is all items from both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives
            the sum of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>The sum of two bags is computed in time O(M), where M is the size of the 
            other bag..</para>
            </remarks>
            <param name="otherBag">Bag to sum with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Sum(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the sum of this bag with another bag. he sum of two bags
            is all items from both of the bags.  If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is 
            created with the sum of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to sum with.</param>
            <returns>The sum of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.IntersectionWith(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the intersection of this bag with another bag. The intersection of two bags
            is all items that appear in both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives
            the intersection of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to intersection with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Intersection(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the intersection of this bag with another bag. The intersection of two bags
            is all items that appear in both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the intersection contains the item Minimum(X,Y) times. A new bag is 
            created with the intersection of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two bags is computed in time O(N), where N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to intersection with.</param>
            <returns>The intersection of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.DifferenceWith(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the difference of this bag with another bag. The difference of these two bags
            is all items that appear in this bag, but not in <paramref name="otherBag"/>. If an item appears X times in this bag,
            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives
            the difference of the two bags; the other bag is unchanged.
            </summary>
            <remarks>
            <para>The difference of two bags is computed in time O(M), where M is the size of the 
            other bag.</para>
            </remarks>
            <param name="otherBag">Bag to difference with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.Difference(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the difference of this bag with another bag. The difference of these two bags
            is all items that appear in this bag, but not in <paramref name="otherBag"/>. If an item appears X times in this bag,
            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is 
            created with the difference of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The difference of two bags is computed in time O(M + N), where M and N are the size
            of the two bags.</para>
            </remarks>
            <param name="otherBag">Bag to difference with.</param>
            <returns>The difference of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.SymmetricDifferenceWith(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags
            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,
            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. This bag receives
            the symmetric difference of the two bags; the other bag is unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to symmetric difference with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Bag`1.SymmetricDifference(CodeSmith.Engine.PowerCollections.Bag{`0})">
            <summary>
            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags
            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,
            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. A new bag is 
            created with the symmetric difference of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to symmetric difference with.</param>
            <returns>The symmetric difference of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Bag`1.Comparer">
            <summary>
            Returns the IEqualityComparer&lt;T&gt; used to compare items in this bag. 
            </summary>
            <value>If the bag was created using a comparer, that comparer is returned. Otherwise
            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Bag`1.Count">
            <summary>
            Returns the number of items in the bag.
            </summary>
            <remarks>The size of the bag is returned in constant time.</remarks>
            <value>The number of items in the bag.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BigList`1">
            <summary>
            BigList&lt;T&gt; provides a list of items, in order, with indices of the items ranging from 0 to one less
            than the count of items in the collection. BigList&lt;T&gt; is optimized for efficient operations on large (&gt;100 items)
            lists, especially for insertions, deletions, copies, and concatinations.
            </summary>
            <remarks>
            <para>BigList&lt;T&gt; class is similar in functionality to the standard List&lt;T&gt; class. Both classes
            provide a collection that stores an set of items in order, with indices of the items ranging from 0 to one less
            than the count of items in the collection. Both classes provide the ability to add and remove items from any index,
            and the get or set the item at any index.</para> 
            <para>BigList&lt;T&gt; differs significantly from List&lt;T&gt; in the performance of various operations, 
            especially when the lists become large (several hundred items or more). With List&lt;T&gt;, inserting or removing
            elements from anywhere in a large list except the end is very inefficient -- every item after the point of inserting
            or deletion has to be moved in the list. The BigList&lt;T&gt; class, however, allows for fast insertions
            and deletions anywhere in the list. Furthermore, BigList&lt;T&gt; allows copies of a list, sub-parts
            of a list, and concatinations of two lists to be very fast. When a copy is made of part or all of a BigList,
            two lists shared storage for the parts of the lists that are the same. Only when one of the lists is changed is additional
            memory allocated to store the distinct parts of the lists.</para>
            <para>Of course, there is a small price to pay for this extra flexibility. Although still quite efficient, using an 
            index to get or change one element of a BigList, while still reasonably efficient, is significantly slower than using
            a plain List. Because of this, if you want to process every element of a BigList, using a foreach loop is a lot
            more efficient than using a for loop and indexing the list.</para>
            <para>In general, use a List when the only operations you are using are Add (to the end), foreach,
            or indexing, or you are very sure the list will always remain small (less than 100 items). For large (&gt;100 items) lists
            that do insertions, removals, copies, concatinations, or sub-ranges, BigList will be more efficient than List. 
            In almost all cases, BigList is more efficient and easier to use than LinkedList.</para>
            </remarks>
            <typeparam name="T">The type of items to store in the BigList.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.StopEnumerations">
            <summary>
            Must be called whenever there is a structural change in the tree. Causes
            changeStamp to be changed, which causes any in-progress enumerations
            to throw exceptions.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.CheckEnumerationStamp(System.Int32)">
            <summary>
            Checks the given stamp against the current change stamp. If different, the
            collection has changed during enumeration and an InvalidOperationException
            must be thrown
            </summary>
            <param name="startStamp">changeStamp at the start of the enumeration.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor">
            <summary>
            Creates a new BigList. The BigList is initially empty.
            </summary>
            <remarks>Creating a empty BigList takes constant time and consumes a very small amount of memory.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Creates a new BigList initialized with the items from <paramref name="collection"/>, in order.
            </summary>
            <remarks>Initializing the tree list with the elements of collection takes time O(N), where N is the number of
            items in <paramref name="collection"/>.</remarks>
            <param name="collection">The collection used to initialize the BigList. </param>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Int32)">
            <summary>
            Creates a new BigList initialized with a given number of copies of the items from <paramref name="collection"/>, in order. 
            </summary>
            <remarks>Initializing the tree list with the elements of collection takes time O(N + log K), where N is the number of
            items in <paramref name="collection"/>, and K is the number of copies.</remarks>
            <param name="copies">Number of copies of the collection to use.</param>
            <param name="collection">The collection used to initialize the BigList. </param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="copies"/> is negative.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor(CodeSmith.Engine.PowerCollections.BigList{`0})">
            <summary>
            Creates a new BigList that is a copy of <paramref name="list"/>.
            </summary>
            <remarks>Copying a BigList takes constant time, and little 
            additional memory, since the storage for the items of the two lists is shared. However, changing
            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>
            <param name="list">The BigList to copy. </param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor(CodeSmith.Engine.PowerCollections.BigList{`0},System.Int32)">
            <summary>
            Creates a new BigList that is several copies of <paramref name="list"/>.
            </summary>
            <remarks>Creating K copies of a BigList takes time O(log K), and O(log K) 
            additional memory, since the storage for the items of the two lists is shared. However, changing
            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>
            <param name="copies">Number of copies of the collection to use.</param>
            <param name="list">The BigList to copy. </param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.#ctor(CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Creates a new BigList from the indicated Node.
            </summary>
            <param name="node">Node that becomes the new root. If null, the new BigList is empty.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Clear">
            <summary>
            Removes all of the items from the BigList.
            </summary>
            <remarks>Clearing a BigList takes constant time.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Insert(System.Int32,`0)">
            <summary>
            Inserts a new item at the given index in the BigList. All items at indexes 
            equal to or greater than <paramref name="index"/> move up one index.
            </summary>
            <remarks>The amount of time to insert an item is O(log N), no matter where
            in the list the insertion occurs. Inserting an item at the beginning or end of the 
            list is O(N). 
            </remarks>
            <param name="index">The index to insert the item at. After the
            insertion, the inserted item is located at this index. The
            first item has index 0.</param>
            <param name="item">The item to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Inserts a collection of items at the given index in the BigList. All items at indexes 
            equal to or greater than <paramref name="index"/> increase their indices 
            by the number of items inserted.
            </summary>
            <remarks>The amount of time to insert an arbitrary collection in the BigList is O(M + log N), 
            where M is the number of items inserted, and N is the number of items in the list.
            </remarks>
            <param name="index">The index to insert the collection at. After the
            insertion, the first item of the inserted collection is located at this index. The
            first item has index 0.</param>
            <param name="collection">The collection of items to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.InsertRange(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0})">
            <summary>
            Inserts a BigList of items at the given index in the BigList. All items at indexes 
            equal to or greater than <paramref name="index"/> increase their indices 
            by the number of items inserted.
            </summary>
            <remarks>The amount of time to insert another BigList is O(log N), 
            where N is the number of items in the list, regardless of the number of items in the 
            inserted list. Storage is shared between the two lists until one of them is changed.
            </remarks>
            <param name="index">The index to insert the collection at. After the
            insertion, the first item of the inserted collection is located at this index. The
            first item has index 0.</param>
            <param name="list">The BigList of items to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.RemoveAt(System.Int32)">
            <summary>
            Removes the item at the given index in the BigList. All items at indexes 
            greater than <paramref name="index"/> move down one index.
            </summary>
            <remarks>The amount of time to delete an item in the BigList is O(log N),
            where N is the number of items in the list. 
            </remarks>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Removes a range of items at the given index in the Deque. All items at indexes 
            greater than <paramref name="index"/> move down <paramref name="count"/> indices
            in the Deque.
            </summary>
            <remarks>The amount of time to delete <paramref name="count"/> items in the Deque is proportional
            to the distance of index from the closest end of the Deque, plus <paramref name="count"/>: 
            O(count + Min(<paramref name="index"/>, Count - 1 - <paramref name="index"/>)).
            </remarks>
            <param name="index">The index in the list to remove the range at. The
            first item in the list has index 0.</param>
            <param name="count">The number of items to remove.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count, or <paramref name="count"/> is less than zero
            or too large.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Add(`0)">
            <summary>
            Adds an item to the end of the BigList. The indices of all existing items
            in the Deque are unchanged. 
            </summary>
            <remarks>Adding an item takes, on average, constant time.</remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddToFront(`0)">
            <summary>
            Adds an item to the beginning of the BigList. The indices of all existing items
            in the Deque are increased by one, and the new item has index zero. 
            </summary>
            <remarks>Adding an item takes, on average, constant time.</remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddRange(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds a collection of items to the end of BigList. The indices of all existing items
            are unchanged. The last item in the added collection becomes the
            last item in the BigList.
            </summary>
            <remarks>This method takes time O(M + log N), where M is the number of items in the 
            <paramref name="collection"/>, and N is the size of the BigList.</remarks>
            <param name="collection">The collection of items to add.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddRangeToFront(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds a collection of items to the front of BigList. The indices of all existing items
            in the are increased by the number of items in <paramref name="collection"/>. 
            The first item in the added collection becomes the first item in the BigList.
            </summary>
            <remarks>This method takes time O(M + log N), where M is the number of items in the 
            <paramref name="collection"/>, and N is the size of the BigList.</remarks>
            <param name="collection">The collection of items to add.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Clone">
            <summary>
            Creates a new BigList that is a copy of this list.
            </summary>
            <remarks>Copying a BigList takes constant time, and little 
            additional memory, since the storage for the items of the two lists is shared. However, changing
            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>
            <returns>A copy of the current list</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.System#ICloneable#Clone">
            <summary>
            Creates a new BigList that is a copy of this list.
            </summary>
            <remarks>Copying a BigList takes constant time, and little 
            additional memory, since the storage for the items of the two lists is shared. However, changing
            either list will take additional time and memory. Portions of the list are copied when they are changed.</remarks>
            <returns>A copy of the current list</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.CloneContents">
            <summary>
            Makes a deep clone of this BigList. A new BigList is created with a clone of
            each element of this set, by calling ICloneable.Clone on each element. If T is
            a value type, then this method is the same as Clone.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>If T is a reference type, cloning the list takes time approximate O(N), where N is the number of items in the list.</para></remarks>
            <returns>The cloned set.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddRange(CodeSmith.Engine.PowerCollections.BigList{`0})">
            <summary>
            Adds a BigList of items to the end of BigList. The indices of all existing items
            are unchanged. The last item in <paramref name="list"/> becomes the
            last item in this list. The added list <paramref name="list"/> is unchanged.
            </summary>
            <remarks>This method takes, on average, constant time, regardless of the size
            of either list. Although conceptually all of the items in <paramref name="list"/> are
            copied, storage is shared between the two lists until changes are made to the 
            shared sections.</remarks>
            <param name="list">The list of items to add.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddRangeToFront(CodeSmith.Engine.PowerCollections.BigList{`0})">
            <summary>
            Adds a BigList of items to the front of BigList. The indices of all existing items
            are increased by the number of items in <paramref name="list"/>. The first item in <paramref name="list"/> 
            becomes the first item in this list. The added list <paramref name="list"/> is unchanged.
            </summary>
            <remarks>This method takes, on average, constant time, regardless of the size
            of either list. Although conceptually all of the items in <paramref name="list"/> are
            copied, storage is shared between the two lists until changes are made to the 
            shared sections.</remarks>
            <param name="list">The list of items to add.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="list"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.op_Addition(CodeSmith.Engine.PowerCollections.BigList{`0},CodeSmith.Engine.PowerCollections.BigList{`0})">
            <summary>
            Concatenates two lists together to create a new list. Both lists being concatenated
            are unchanged. The resulting list contains all the items in <paramref name="first"/>, followed
            by all the items in <paramref name="second"/>.
            </summary>
            <remarks>This method takes, on average, constant time, regardless of the size
            of either list. Although conceptually all of the items in both lists are
            copied, storage is shared until changes are made to the 
            shared sections.</remarks>
            <param name="first">The first list to concatenate.</param>
            <param name="second">The second list to concatenate.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="first"/> or <paramref name="second"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)">
            <summary>
            Creates a new list that contains a subrange of elements from this list. The
            current list is unchanged.
            </summary>
            <remarks>This method takes take O(log N), where N is the size of the current list. Although
            the sub-range is conceptually copied, storage is shared between the two lists until a change
            is made to the shared items.</remarks>
            <remarks>If a view of a sub-range is desired, instead of a copy, use the
            more efficient <see cref="M:CodeSmith.Engine.PowerCollections.BigList`1.Range(System.Int32,System.Int32)"/> method, which provides a view onto a sub-range of items.</remarks>
            <param name="index">The starting index of the sub-range.</param>
            <param name="count">The number of items in the sub-range. If this is zero,
            the returned list is empty.</param>
            <returns>A new list with the <paramref name="count"/> items that start at <paramref name="index"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Range(System.Int32,System.Int32)">
            <summary>
            Returns a view onto a sub-range of this list. Items are not copied; the
            returned IList&lt;T&gt; is simply a different view onto the same underlying items. Changes to this list
            are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the 
            view, but insertions and deletions in the underlying list do not.
            </summary>
            <remarks>
            <para>If a copy of the sub-range is desired, use the <see cref="M:CodeSmith.Engine.PowerCollections.BigList`1.GetRange(System.Int32,System.Int32)"/> method instead.</para>
            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>
            <code>Algorithms.ReverseInPlace(list.Range(3, 6))</code>
            will reverse the 6 items beginning at index 3.</remarks>
            <param name="index">The starting index of the view.</param>
            <param name="count">The number of items in the view.</param>
            <returns>A list that is a view onto the given sub-list. </returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> or <paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> + <paramref name="count"/> is greater than the
            size of this list.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.GetEnumerator(System.Int32,System.Int32)">
            <summary>
            Enumerates a range of the items in the list, in order. The item at <paramref name="start"/>
            is enumerated first, then the next item at index 1, and so on. At most <paramref name="maxItems"/>
            items are enumerated. 
            </summary>
            <remarks>Enumerating all of the items in the list take time O(N), where
            N is the number of items being enumerated. Using GetEnumerator() or foreach
            is much more efficient than accessing all items by index.</remarks>
            <param name="start">Index to start enumerating at.</param>
            <param name="maxItems">Max number of items to enumerate.</param>
            <returns>An IEnumerator&lt;T&gt; that enumerates all the
            items in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.GetEnumerator">
            <summary>
            Enumerates all of the items in the list, in order. The item at index 0
            is enumerated first, then the item at index 1, and so on. Usually, the
            foreach statement is used to call this method implicitly.
            </summary>
            <remarks>Enumerating all of the items in the list take time O(N), where
            N is the number of items in the list. Using GetEnumerator() or foreach
            is much more efficient than accessing all items by index.</remarks>
            <returns>An IEnumerator&lt;T&gt; that enumerates all the
            items in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.NodeFromEnumerable(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Given an IEnumerable&lt;T&gt;, create a new Node with all of the 
            items in the enumerable. Returns null if the enumerable has no items.
            </summary>
            <param name="collection">The collection to copy.</param>
            <returns>Returns a Node, not shared or with any shared children, 
            with the items from the collection. If the collection was empty,
            null is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafFromEnumerator(System.Collections.Generic.IEnumerator{`0})">
            <summary>
            Consumes up to MAXLEAF items from an Enumerator and places them in a leaf
            node. If the enumerator is at the end, null is returned.
            </summary>
            <param name="enumerator">The enumerator to take items from.</param>
            <returns>A LeafNode with items taken from the enumerator. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.NCopiesOfNode(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Create a node that has N copies of the given node. 
            </summary>
            <param name="copies">Number of copies. Must be non-negative.</param>
            <param name="node">Node to make copies of.</param>
            <returns>null if node is null or copies is 0. Otherwise, a node consisting of <paramref name="copies"/> copies
            of node.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException">copies is negative.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.CheckBalance">
            <summary>
            Check the balance of the current tree and rebalance it if it is more than BALANCEFACTOR
            levels away from fully balanced. Note that rebalancing a tree may leave it two levels away from 
            fully balanced.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Rebalance">
            <summary>
            Rebalance the current tree. Once rebalanced, the depth of the current tree is no more than
            two levels from fully balanced, where fully balanced is defined as having Fibonacci(N+2) or more items
            in a tree of depth N.
            </summary>
            <remarks>The rebalancing algorithm is from "Ropes: an Alternative to Strings", by 
            Boehm, Atkinson, and Plass, in SOFTWARE--PRACTICE AND EXPERIENCE, VOL. 25(12), 1315–1330 (DECEMBER 1995).
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddNodeToRebalanceArray(CodeSmith.Engine.PowerCollections.BigList{`0}.Node[],CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Part of the rebalancing algorithm. Adds a node to the rebalance array. If it is already balanced, add it directly, otherwise
            add its children.
            </summary>
            <param name="rebalanceArray">Rebalance array to insert into.</param>
            <param name="node">Node to add.</param>
            <param name="shared">If true, mark the node as shared before adding, because one
            of its parents was shared.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.AddBalancedNodeToRebalanceArray(CodeSmith.Engine.PowerCollections.BigList{`0}.Node[],CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Part of the rebalancing algorithm. Adds a balanced node to the rebalance array. 
            </summary>
            <param name="rebalanceArray">Rebalance array to insert into.</param>
            <param name="balancedNode">Node to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConvertAll``1(System.Converter{`0,``0})">
            <summary>
            Convert the list to a new list by applying a delegate to each item in the collection. The resulting list
            contains the result of applying <paramref name="converter"/> to each item in the list, in
            order. The current list is unchanged.
            </summary>
            <typeparam name="TDest">The type each item is being converted to.</typeparam>
            <param name="converter">A delegate to the method to call, passing each item in <paramref name="sourceCollection"/>.</param>
            <returns>The resulting BigList from applying <paramref name="converter"/> to each item in this list.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="converter"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Reverse">
            <summary>
            Reverses the current list in place.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Reverse(System.Int32,System.Int32)">
            <summary>
            Reverses the items in the range of <paramref name="count"/> items starting from <paramref name="startIndex"/>, in place.
            </summary>
            <param name="start">The starting index of the range to reverse.</param>
            <param name="count">The number of items in range to reverse.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Sort">
            <summary>
            Sorts the list in place.
            </summary>
            <remarks><para>The Quicksort algorithm is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</para>
            <para>Values are compared by using the IComparable or IComparable&lt;T&gt;
            interface implementation on the type T.</para></remarks>
            <exception cref="T:System.InvalidOperationException">The type T does not implement either the IComparable or
            IComparable&lt;T&gt; interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Sort(System.Collections.Generic.IComparer{`0})">
            <summary>
            Sorts the list in place. A supplied IComparer&lt;T&gt; is used
            to compare the items in the list. 
            </summary>
            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</remarks>
            <param name="comparer">The comparer instance used to compare items in the collection. Only
            the Compare method is used.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Sort(System.Comparison{`0})">
            <summary>
            Sorts the list in place. A supplied Comparison&lt;T&gt; delegate is used
            to compare the items in the list.
            </summary>
            <remarks>The Quicksort algorithms is used to sort the items. In virtually all cases,
            this takes time O(N log N), where N is the number of items in the list.</remarks>
            <param name="comparison">The comparison delegate used to compare items in the collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.BinarySearch(`0)">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            in the order defined by the default ordering of the item type; otherwise, 
            incorrect results will be returned.
            </summary>
            <param name="item">The item to search for.</param>
            <returns>Returns the index of the first occurence of <paramref name="item"/> in the list. If the item does not occur
            in the list, the bitwise complement of the first item larger than <paramref name="item"/> in the list is returned. If no item is 
            larger than <paramref name="item"/>, the bitwise complement of Count is returned.</returns>
            <exception cref="T:System.InvalidOperationException">The type T does not implement either the IComparable or
            IComparable&lt;T&gt; interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.BinarySearch(`0,System.Collections.Generic.IComparer{`0})">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            by the ordering defined by the passed IComparer&lt;T&gt; interface; otherwise, 
            incorrect results will be returned.
            </summary>
            <param name="item">The item to search for.</param>
            <param name="comparer">The IComparer&lt;T&gt; interface used to sort the list.</param>
            <returns>Returns the index of the first occurence of <paramref name="item"/> in the list. If the item does not occur
            in the list, the bitwise complement of the first item larger than <paramref name="item"/> in the list is returned. If no item is 
            larger than <paramref name="item"/>, the bitwise complement of Count is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.BinarySearch(`0,System.Comparison{`0})">
            <summary>
            Searches a sorted list for an item via binary search. The list must be sorted
            by the ordering defined by the passed Comparison&lt;T&gt; delegate; otherwise, 
            incorrect results will be returned.
            </summary>
            <param name="item">The item to search for.</param>
            <param name="comparison">The comparison delegate used to sort the list.</param>
            <returns>Returns the index of the first occurence of <paramref name="item"/> in the list. If the item does not occur
            in the list, the bitwise complement of the first item larger than <paramref name="item"/> in the list is returned. If no item is 
            larger than <paramref name="item"/>, the bitwise complement of Count is returned.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.Count">
            <summary>
            Gets the number of items stored in the BigList. The indices of the items
            range from 0 to Count-1.
            </summary>
            <remarks>Getting the number of items in the BigList takes constant time.</remarks>
            <value>The number of items in the BigList.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.Item(System.Int32)">
            <summary>
            Gets or sets an item in the list, by index.
            </summary>
            <remarks><para> Gettingor setting an item takes time O(log N), where N is the number of items
            in the list.</para>
            <para>To process each of the items in the list, using GetEnumerator() or a foreach loop is more efficient
            that accessing each of the elements by index.</para></remarks>
            <param name="index">The index of the item to get or set. The first item in the list
            has index 0, the last item has index Count-1.</param>
            <returns>The value of the item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is less than zero or 
            greater than or equal to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BigList`1.Node">
            <summary>
            The base class for the two kinds of nodes in the tree: Concat nodes
            and Leaf nodes.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.MarkShared">
            <summary>
            Marks this node as shared by setting the shared variable.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.GetAt(System.Int32)">
            <summary>
            Returns the items at the given index in this node.
            </summary>
            <param name="index">0-based index, relative to this node.</param>
            <returns>Item at that index.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.Subrange(System.Int32,System.Int32)">
            <summary>
            Returns a node that has a sub-range of items from this node. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive first element, relative to this node.</param>
            <param name="last">Inclusize last element, relative to this node.</param>
            <returns>Node with the given sub-range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.SetAt(System.Int32,`0)">
            <summary>
            Changes the item at the given index. Never changes this node,
            but always returns a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A new node with the given item changed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.SetAtInPlace(System.Int32,`0)">
            <summary>
            Changes the item at the given index. May change this node,
            or return a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A node with the give item changed. If it can be done in place
            then "this" is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.Append(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Append a node after this node. Never changes this node, but returns
            a new node with the given appending done.
            </summary>
            <param name="node">Node to append.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A new node with the give node appended to this node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.AppendInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Append a node after this node. May change this node, or return 
            a new node.
            </summary>
            <param name="node">Node to append.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the give node appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.AppendInPlace(`0)">
            <summary>
            Append a item after this node. May change this node, or return 
            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to append.</param>
            <returns>A node with the given item appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. Never changes this node, but returns
            a new node with the removing done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A new node with the sub-range removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.RemoveRangeInPlace(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. May change this node, or returns
            a new node with the given appending done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A node with the sub-range removed. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.Insert(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. Never changes this node, but returns
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A new node with the give node inserted.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,`0)">
            <summary>
            Inserts an item inside this node. May change this node, or return
            a new node with the given appending done. Equivalent to 
            InsertInPlace(new LeafNode(item), true), but may be more efficient.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="item">Item to insert.</param>
            <returns>A node with the give item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.InsertInPlace(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. May change this node, or return
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the given item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.Prepend(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Prefpend a node before this node. Never changes this node, but returns
            a new node with the given prepending done.
            </summary>
            <param name="node">Node to prepend.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A new node with the give node prepended to this node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.PrependInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Prepend a node before this node. May change this node, or return 
            a new node.
            </summary>
            <param name="node">Node to prepend.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the give node prepended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.PrependInPlace(`0)">
            <summary>
            Prepend a item before this node. May change this node, or return 
            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to prepend.</param>
            <returns>A node with the given item prepended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.IsBalanced">
            <summary>
            Determine if this node is balanced. A node is balanced if the number
            of items is greater than
            Fibonacci(Depth+2). Balanced nodes are never rebalanced unless
            they go out of balance again.
            </summary>
            <returns>True if the node is balanced by this definition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.Node.IsAlmostBalanced">
            <summary>
            Determine if this node is almost balanced. A node is almost balanced if t
            its depth is at most one greater than a fully balanced node with the same count.
            </summary>
            <returns>True if the node is almost balanced by this definition.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.Node.Count">
            <summary>
            The number of items stored in the node (or below it).
            </summary>
            <value>The number of items in the node or below.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.Node.Shared">
            <summary>
            Is this node shared by more that one list (or within a single)
            lists. If true, indicates that this node, and any nodes below it,
            may never be modified. Never becomes false after being set to 
            true.
            </summary>
            <value></value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.Node.Depth">
            <summary>
            Gets the depth of this node. A leaf node has depth 0, 
            a concat node with two leaf children has depth 1, etc.
            </summary>
            <value>The depth of this node.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode">
            <summary>
            The LeafNode class is the type of node that lives at the leaf of a tree and holds
            the actual items stored in the list. Each leaf holds at least 1, and at most MAXLEAF
            items in the items array. The number of items stored is found in "count", which may
            be less than "items.Length".
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.items">
            <summary>
            Array that stores the items in the nodes. Always has a least "count" elements,
            but may have more as padding.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.#ctor(`0)">
            <summary>
            Creates a LeafNode that holds a single item.
            </summary>
            <param name="item">Item to place into the leaf node.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.#ctor(System.Int32,`0[])">
            <summary>
            Creates a new leaf node with the indicates count of item and the
            </summary>
            <param name="count">Number of items. Can't be zero.</param>
            <param name="newItems">The array of items. The LeafNode takes
            possession of this array.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.GetAt(System.Int32)">
            <summary>
            Returns the items at the given index in this node.
            </summary>
            <param name="index">0-based index, relative to this node.</param>
            <returns>Item at that index.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.SetAtInPlace(System.Int32,`0)">
            <summary>
            Changes the item at the given index. May change this node,
            or return a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A node with the give item changed. If it can be done in place
            then "this" is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.SetAt(System.Int32,`0)">
            <summary>
            Changes the item at the given index. Never changes this node,
            but always returns a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A new node with the given item changed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.MergeLeafInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge
            the other leaf node into this one (after this one) and return true.
            </summary>
            <param name="other">Other node to possible merge.</param>
            <returns>If <paramref name="other"/> could be merged into this node, returns
            true. Otherwise returns false and the current node is unchanged.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.MergeLeaf(CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            If other is a leaf node, and the resulting size would be less than MAXLEAF, merge
            the other leaf node with this one (after this one) and return a new node with 
            the merged items. Does not modify this.
            If no merging, return null.
            </summary>
            <param name="other">Other node to possible merge.</param>
            <returns>If the nodes could be merged, returns the new node. Otherwise
            returns null.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.PrependInPlace(`0)">
            <summary>
            Prepend a item before this node. May change this node, or return 
            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to prepend.</param>
            <returns>A node with the given item prepended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.AppendInPlace(`0)">
            <summary>
            Append a item after this node. May change this node, or return 
            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to append.</param>
            <returns>A node with the given item appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.AppendInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Append a node after this node. May change this node, or return 
            a new node.
            </summary>
            <param name="node">Node to append.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the give node appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,`0)">
            <summary>
            Inserts an item inside this node. May change this node, or return
            a new node with the given appending done. Equivalent to 
            InsertInPlace(new LeafNode(item), true), but may be more efficient.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="item">Item to insert.</param>
            <returns>A node with the give item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.InsertInPlace(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. May change this node, or return
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the given item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.Insert(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. Never changes this node, but returns
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A new node with the give node inserted.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.RemoveRangeInPlace(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. May change this node, or returns
            a new node with the given appending done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A node with the sub-range removed. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. Never changes this node, but returns
            a new node with the removing done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A new node with the sub-range removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.LeafNode.Subrange(System.Int32,System.Int32)">
            <summary>
            Returns a node that has a sub-range of items from this node. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive first element, relative to this node.</param>
            <param name="last">Inclusize last element, relative to this node.</param>
            <returns>Node with the given sub-range.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode">
            <summary>
            A ConcatNode is an interior (non-leaf) node that represents the concatination of
            the left and right child nodes. Both children must always be non-null.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.left">
            <summary>
            The left and right child nodes. They are never null.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.right">
            <summary>
            The left and right child nodes. They are never null.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.depth">
            <summary>
            The depth of this node -- the maximum length path to 
            a leaf. If this node has two children that are leaves, the
            depth in 1.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.#ctor(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Create a new ConcatNode with the given children.
            </summary>
            <param name="left">The left child. May not be null.</param>
            <param name="right">The right child. May not be null.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.NewNode(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Create a new node with the given children. Mark unchanged
            children as shared. There are four
            possible cases:
            1. If one of the new children is null, the other new child is returned.
            2. If neither child has changed, then this is marked as shared as returned.
            3. If one child has changed, the other child is marked shared an a new node is returned.
            4. If both children have changed, a new node is returned.
            </summary>
            <param name="newLeft">New left child.</param>
            <param name="newRight">New right child.</param>
            <returns>New node with the given children. Returns null if and only if both
            new children are null.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.NewNodeInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,CodeSmith.Engine.PowerCollections.BigList{`0}.Node)">
            <summary>
            Updates a node with the given new children. If one of the new children is
            null, the other is returned. If both are null, null is returned.
            </summary>
            <param name="newLeft">New left child.</param>
            <param name="newRight">New right child.</param>
            <returns>Node with the given children. Usually, but not always, this. Returns
            null if and only if both new children are null.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.GetAt(System.Int32)">
            <summary>
            Returns the items at the given index in this node.
            </summary>
            <param name="index">0-based index, relative to this node.</param>
            <returns>Item at that index.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.SetAtInPlace(System.Int32,`0)">
            <summary>
            Changes the item at the given index. May change this node,
            or return a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A node with the give item changed. If it can be done in place
            then "this" is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.SetAt(System.Int32,`0)">
            <summary>
            Changes the item at the given index. Never changes this node,
            but always returns a new node with the given item changed.
            </summary>
            <param name="index">Index, relative to this node, to change.</param>
            <param name="item">New item to place at the given index.</param>
            <returns>A new node with the given item changed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.PrependInPlace(`0)">
            <summary>
            Prepend a item before this node. May change this node, or return 
            a new node. Equivalent to PrependInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to prepend.</param>
            <returns>A node with the given item prepended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.AppendInPlace(`0)">
            <summary>
            Append a item after this node. May change this node, or return 
            a new node. Equivalent to AppendInPlace(new LeafNode(item), true), but
            may be more efficient because a new LeafNode might not be allocated.
            </summary>
            <param name="item">Item to append.</param>
            <returns>A node with the given item appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.AppendInPlace(CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Append a node after this node. May change this node, or return 
            a new node.
            </summary>
            <param name="node">Node to append.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the give node appended to this node. May be a new
            node or the current node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,`0)">
            <summary>
            Inserts an item inside this node. May change this node, or return
            a new node with the given appending done. Equivalent to 
            InsertInPlace(new LeafNode(item), true), but may be more efficient.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="item">Item to insert.</param>
            <returns>A node with the give item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.InsertInPlace(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. May change this node, or return
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A node with the given item inserted. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.Insert(System.Int32,CodeSmith.Engine.PowerCollections.BigList{`0}.Node,System.Boolean)">
            <summary>
            Inserts a node inside this node. Never changes this node, but returns
            a new node with the given appending done.
            </summary>
            <param name="index">Index, relative to this node, to insert at. Must 
            be in bounds.</param>
            <param name="node">Node to insert.</param>
            <param name="nodeIsUnused">If true, the given node is not used
            in any current list, so it may be change, overwritten, or destroyed
            if convenient. If false, the given node is in use. It should be marked
            as shared if is is used within the return value.</param>
            <returns>A new node with the give node inserted.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.RemoveRangeInPlace(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. May change this node, or returns
            a new node with the given appending done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A node with the sub-range removed. If done in-place, returns
            "this".</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Remove a range of items from this node. Never changes this node, but returns
            a new node with the removing done. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive index of first item in sub-range, relative
            to this node.</param>
            <param name="last">Inclusize index of last item in sub-range, relative
            to this node.</param>
            <returns>A new node with the sub-range removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.Subrange(System.Int32,System.Int32)">
            <summary>
            Returns a node that has a sub-range of items from this node. The
            sub-range may not be empty, but may extend outside the node. 
            In other words, first might be less than zero or last might be greater
            than count. But, last can't be less than zero and first can't be
            greater than count. Also, last must be greater than or equal to last.
            </summary>
            <param name="first">Inclusive first element, relative to this node.</param>
            <param name="last">Inclusize last element, relative to this node.</param>
            <returns>Node with the given sub-range.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.BigList`1.ConcatNode.Depth">
            <summary>
            The depth of this node -- the maximum length path to 
            a leaf. If this node has two children that are leaves, the
            depth in 1.
            </summary>
            <value>The depth of this node.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.BigList`1.BigListRange">
            <summary>
            The class that is used to implement IList&lt;T&gt; to view a sub-range
            of a BigList. The object stores a wrapped list, and a start/count indicating
            a sub-range of the list. Insertion/deletions through the sub-range view
            cause the count to change also; insertions and deletions directly on
            the wrapped list do not.
            </summary>
            <remarks>This is different from Algorithms.Range in a very few respects:
            it is specialized to only wrap BigList, and it is a lot more efficient in enumeration.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.BigList`1.BigListRange.#ctor(CodeSmith.Engine.PowerCollections.BigList{`0},System.Int32,System.Int32)">
            <summary>
            Create a sub-range view object on the indicate part 
            of the list. 
            </summary>
            <param name="wrappedList">List to wrap.</param>
            <param name="start">The start index of the view in the wrapped list.</param>
            <param name="count">The number of items in the view.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers">
            <summary>
            A collection of methods to create IComparer and IEqualityComparer instances in various ways.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.ComparerFromComparison``1(System.Comparison{``0})">
            <summary>
            Given an Comparison on a type, returns an IComparer on that type. 
            </summary>
            <typeparam name="T">T to compare.</typeparam>
            <param name="comparison">Comparison delegate on T</param>
            <returns>IComparer that uses the comparison.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.ComparerKeyValueFromComparerKey``2(System.Collections.Generic.IComparer{``0})">
            <summary>
            Given an IComparer on TKey, returns an IComparer on
            key-value Pairs. 
            </summary>
            <typeparam name="TKey">TKey of the pairs</typeparam>
            <typeparam name="TValue">TValue of the apris</typeparam>
            <param name="keyComparer">IComparer on TKey</param>
            <returns>IComparer for comparing key-value pairs.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.EqualityComparerKeyValueFromComparerKey``2(System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Given an IEqualityComparer on TKey, returns an IEqualityComparer on
            key-value Pairs. 
            </summary>
            <typeparam name="TKey">TKey of the pairs</typeparam>
            <typeparam name="TValue">TValue of the apris</typeparam>
            <param name="keyEqualityComparer">IComparer on TKey</param>
            <returns>IEqualityComparer for comparing key-value pairs.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.ComparerPairFromKeyValueComparers``2(System.Collections.Generic.IComparer{``0},System.Collections.Generic.IComparer{``1})">
            <summary>
            Given an IComparer on TKey and TValue, returns an IComparer on
            key-value Pairs of TKey and TValue, comparing first keys, then values. 
            </summary>
            <typeparam name="TKey">TKey of the pairs</typeparam>
            <typeparam name="TValue">TValue of the apris</typeparam>
            <param name="keyComparer">IComparer on TKey</param>
            <param name="valueComparer">IComparer on TValue</param>
            <returns>IComparer for comparing key-value pairs.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.ComparerKeyValueFromComparisonKey``2(System.Comparison{``0})">
            <summary>
            Given an Comparison on TKey, returns an IComparer on
            key-value Pairs. 
            </summary>
            <typeparam name="TKey">TKey of the pairs</typeparam>
            <typeparam name="TValue">TValue of the apris</typeparam>
            <param name="keyComparison">Comparison delegate on TKey</param>
            <returns>IComparer for comparing key-value pairs.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.DefaultComparer``1">
            <summary>
            Given an element type, check that it implements IComparable&lt;T&gt; or IComparable, then returns
            a IComparer that can be used to compare elements of that type.
            </summary>
            <returns>The IComparer&lt;T&gt; instance.</returns>
            <exception cref="T:System.InvalidOperationException">T does not implement IComparable&lt;T&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Comparers.DefaultKeyValueComparer``2">
            <summary>
            Given an key and value type, check that TKey implements IComparable&lt;T&gt; or IComparable, then returns
            a IComparer that can be used to compare KeyValuePairs of those types.
            </summary>
            <returns>The IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; instance.</returns>
            <exception cref="T:System.InvalidOperationException">TKey does not implement IComparable&lt;T&gt;.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers.KeyValueEqualityComparer`2">
            <summary>
            Class to change an IEqualityComparer&lt;TKey&gt; to an IEqualityComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; 
            Only the keys are compared.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers.KeyValueComparer`2">
            <summary>
            Class to change an IComparer&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; 
            Only the keys are compared.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers.PairComparer`2">
            <summary>
            Class to change an IComparer&lt;TKey&gt; and IComparer&lt;TValue&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt; 
            Keys are compared, followed by values.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers.ComparisonComparer`1">
            <summary>
            Class to change an Comparison&lt;T&gt; to an IComparer&lt;T&gt;.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Comparers.ComparisonKeyValueComparer`2">
            <summary>
            Class to change an Comparison&lt;TKey&gt; to an IComparer&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;.
            GetHashCode cannot be used on this class.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Deque`1">
            <summary>
            <para>The Deque class implements a type of list known as a Double Ended Queue. A Deque
            is quite similar to a List, in that items have indices (starting at 0), and the item at any
            index can be efficiently retrieved. The difference between a List and a Deque lies in the
            efficiency of inserting elements at the beginning. In a List, items can be efficiently added
            to the end, but inserting an item at the beginning of the List is slow, taking time 
            proportional to the size of the List. In a Deque, items can be added to the beginning 
            or end equally efficiently, regardless of the number of items in the Deque. As a trade-off
            for this increased flexibility, Deque is somewhat slower than List (but still constant time) when
            being indexed to get or retrieve elements. </para>
            </summary>
            <remarks>
            <para>The Deque class can also be used as a more flexible alternative to the Queue 
            and Stack classes. Deque is as efficient as Queue and Stack for adding or removing items, 
            but is more flexible: it allows access
            to all items in the queue, and allows adding or removing from either end.</para>
            <para>Deque is implemented as a ring buffer, which is grown as necessary. The size
            of the buffer is doubled whenever the existing capacity is too small to hold all the
            elements.</para>
            </remarks>
            <typeparam name="T">The type of items stored in the Deque.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.StopEnumerations">
            <summary>
            Must be called whenever there is a structural change in the tree. Causes
            changeStamp to be changed, which causes any in-progress enumerations
            to throw exceptions.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.CheckEnumerationStamp(System.Int32)">
            <summary>
            Checks the given stamp against the current change stamp. If different, the
            collection has changed during enumeration and an InvalidOperationException
            must be thrown
            </summary>
            <param name="startStamp">changeStamp at the start of the enumeration.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.#ctor">
            <summary>
            Create a new Deque that is initially empty.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Create a new Deque initialized with the items from the passed collection,
            in order.
            </summary>
            <param name="collection">A collection of items to initialize the Deque with.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies all the items in the Deque into an array.
            </summary>
            <param name="array">Array to copy to.</param>
            <param name="arrayIndex">Starting index in <paramref name="array"/> to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.TrimToSize">
            <summary>
            Trims the amount of memory used by the Deque by changing
            the Capacity to be equal to Count. If no more items will be added
            to the Deque, calling TrimToSize will reduce the amount of memory
            used by the Deque.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.Clear">
            <summary>
            Removes all items from the Deque.
            </summary>
            <remarks>Clearing the Deque takes a small constant amount of time, regardless of
            how many items are currently in the Deque.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.GetEnumerator">
            <summary>
            Enumerates all of the items in the list, in order. The item at index 0
            is enumerated first, then the item at index 1, and so on. If the items
            are added to or removed from the Deque during enumeration, the 
            enumeration ends with an InvalidOperationException.
            </summary>
            <returns>An IEnumerator&lt;T&gt; that enumerates all the
            items in the list.</returns>
            <exception cref="T:System.InvalidOperationException">The Deque has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.CreateInitialBuffer(`0)">
            <summary>
            Creates the initial buffer and initialized the Deque to contain one initial
            item.
            </summary>
            <param name="firstItem">First and only item for the Deque.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.Insert(System.Int32,`0)">
            <summary>
            Inserts a new item at the given index in the Deque. All items at indexes 
            equal to or greater than <paramref name="index"/> move up one index
            in the Deque.
            </summary>
            <remarks>The amount of time to insert an item in the Deque is proportional
            to the distance of index from the closest end of the Deque: 
            O(Min(<paramref name="index"/>, Count - <paramref name="index"/>)).
            Thus, inserting an item at the front or end of the Deque is always fast; the middle of
            of the Deque is the slowest place to insert.
            </remarks>
            <param name="index">The index in the Deque to insert the item at. After the
            insertion, the inserted item is located at this index. The
            front item in the Deque has index 0.</param>
            <param name="item">The item to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.InsertRange(System.Int32,System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Inserts a collection of items at the given index in the Deque. All items at indexes 
            equal to or greater than <paramref name="index"/> increase their indices in the Deque
            by the number of items inserted.
            </summary>
            <remarks>The amount of time to insert a collection in the Deque is proportional
            to the distance of index from the closest end of the Deque, plus the number of items
            inserted (M): 
            O(M + Min(<paramref name="index"/>, Count - <paramref name="index"/>)).
            </remarks>
            <param name="index">The index in the Deque to insert the collection at. After the
            insertion, the first item of the inserted collection is located at this index. The
            front item in the Deque has index 0.</param>
            <param name="collection">The collection of items to insert at the given index.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.RemoveAt(System.Int32)">
            <summary>
            Removes the item at the given index in the Deque. All items at indexes 
            greater than <paramref name="index"/> move down one index
            in the Deque.
            </summary>
            <remarks>The amount of time to delete an item in the Deque is proportional
            to the distance of index from the closest end of the Deque: 
            O(Min(<paramref name="index"/>, Count - 1 - <paramref name="index"/>)).
            Thus, deleting an item at the front or end of the Deque is always fast; the middle of
            of the Deque is the slowest place to delete.
            </remarks>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.RemoveRange(System.Int32,System.Int32)">
            <summary>
            Removes a range of items at the given index in the Deque. All items at indexes 
            greater than <paramref name="index"/> move down <paramref name="count"/> indices
            in the Deque.
            </summary>
            <remarks>The amount of time to delete <paramref name="count"/> items in the Deque is proportional
            to the distance to the closest end of the Deque: 
            O(Min(<paramref name="index"/>, Count - <paramref name="index"/> - <paramref name="count"/>)).
            </remarks>
            <param name="index">The index in the list to remove the range at. The
            first item in the list has index 0.</param>
            <param name="count">The number of items to remove.</param>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count, or <paramref name="count"/> is less than zero
            or too large.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.IncreaseBuffer">
            <summary>
            Increase the amount of buffer space. When calling this method, the Deque
            must not be empty. If start and end are equal, that indicates a completely
            full Deque.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.AddToFront(`0)">
            <summary>
            Adds an item to the front of the Deque. The indices of all existing items
            in the Deque are increased by 1. This method is 
            equivalent to <c>Insert(0, item)</c> but is a little more
            efficient.
            </summary>
            <remarks>Adding an item to the front of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.AddManyToFront(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds a collection of items to the front of the Deque. The indices of all existing items
            in the Deque are increased by the number of items inserted. The first item in the added collection becomes the
            first item in the Deque. 
            </summary>
            <remarks>This method takes time O(M), where M is the number of items in the 
            <paramref name="collection"/>.</remarks>
            <param name="collection">The collection of items to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.AddToBack(`0)">
            <summary>
            Adds an item to the back of the Deque. The indices of all existing items
            in the Deque are unchanged. This method is 
            equivalent to <c>Insert(Count, item)</c> but is a little more
            efficient.
            </summary>
            <remarks>Adding an item to the back of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.Add(`0)">
            <summary>
            Adds an item to the back of the Deque. The indices of all existing items
            in the Deque are unchanged. This method is 
            equivalent to <c>AddToBack(item)</c>.
            </summary>
            <remarks>Adding an item to the back of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.AddManyToBack(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds a collection of items to the back of the Deque. The indices of all existing items
            in the Deque are unchanged. The last item in the added collection becomes the
            last item in the Deque.
            </summary>
            <remarks>This method takes time O(M), where M is the number of items in the 
            <paramref name="collection"/>.</remarks>
            <param name="collection">The collection of item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.RemoveFromFront">
            <summary>
            Removes an item from the front of the Deque. The indices of all existing items
            in the Deque are decreased by 1. This method is 
            equivalent to <c>RemoveAt(0)</c> but is a little more
            efficient.
            </summary>
            <remarks>Removing an item from the front of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <returns>The item that was removed.</returns>
            <exception cref="T:System.InvalidOperationException">The Deque is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.RemoveFromBack">
            <summary>
            Removes an item from the back of the Deque. The indices of all existing items
            in the Deque are unchanged. This method is 
            equivalent to <c>RemoveAt(Count-1)</c> but is a little more
            efficient.
            </summary>
            <remarks>Removing an item from the back of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <exception cref="T:System.InvalidOperationException">The Deque is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.GetAtFront">
            <summary>
            Retreives the item currently at the front of the Deque. The Deque is 
            unchanged. This method is 
            equivalent to <c>deque[0]</c> (except that a different exception is thrown).
            </summary>
            <remarks>Retreiving the item at the front of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <returns>The item at the front of the Deque.</returns>
            <exception cref="T:System.InvalidOperationException">The Deque is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.GetAtBack">
            <summary>
            Retreives the item currently at the back of the Deque. The Deque is 
            unchanged. This method is 
            equivalent to <c>deque[deque.Count - 1]</c> (except that a different exception is thrown).
            </summary>
            <remarks>Retreiving the item at the back of the Deque takes
            a small constant amount of time, regardless of how many items are in the Deque.</remarks>
            <returns>The item at the back of the Deque.</returns>
            <exception cref="T:System.InvalidOperationException">The Deque is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.Clone">
            <summary>
            Creates a new Deque that is a copy of this one.
            </summary>
            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>
            <returns>A copy of the current deque.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.System#ICloneable#Clone">
            <summary>
            Creates a new Deque that is a copy of this one.
            </summary>
            <remarks>Copying a Deque takes O(N) time, where N is the number of items in this Deque..</remarks>
            <returns>A copy of the current deque.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Deque`1.CloneContents">
            <summary>
            Makes a deep clone of this Deque. A new Deque is created with a clone of
            each element of this set, by calling ICloneable.Clone on each element. If T is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the Deque takes time O(N), where N is the number of items in the Deque.</para></remarks>
            <returns>The cloned Deque.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Deque`1.Count">
            <summary>
            Gets the number of items currently stored in the Deque. The last item
            in the Deque has index Count-1.
            </summary>
            <remarks>Getting the count of items in the Deque takes a small constant
            amount of time.</remarks>
            <value>The number of items stored in this Deque.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Deque`1.Capacity">
            <summary>
            Gets or sets the capacity of the Deque. The Capacity is the number of
            items that this Deque can hold without expanding its internal buffer. Since
            Deque will automatically expand its buffer when necessary, in almost all cases
            it is unnecessary to worry about the capacity. However, if it is known that a
            Deque will contain exactly 1000 items eventually, it can slightly improve 
            efficiency to set the capacity to 1000 up front, so that the Deque does not
            have to expand automatically.
            </summary>
            <value>The number of items that this Deque can hold without expanding its
            internal buffer.</value>
            <exception cref="T:System.ArgumentOutOfRangeException">The capacity is being set
            to less than Count, or to too large a value.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Deque`1.Item(System.Int32)">
            <summary>
            Gets or sets an item at a particular index in the Deque. 
            </summary>
            <remarks>Getting or setting the item at a particular index takes a small constant amount
            of time, no matter what index is used.</remarks>
            <param name="index">The index of the item to retrieve or change. The front item has index 0, and
            the back item has index Count-1.</param>
            <returns>The value at the indicated index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException">The index is less than zero or greater than or equal
            to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.DictionaryBase`2">
            <summary>
            DictionaryBase is a base class that can be used to more easily implement the
            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.
            </summary>
            <remarks>
            <para>To use DictionaryBase as a base class, the derived class must override
            Count, GetEnumerator, TryGetValue, Clear, Remove, and the indexer set accessor. </para>
            </remarks>
            <typeparam name="TKey">The key type of the dictionary.</typeparam>
            <typeparam name="TValue">The value type of the dictionary.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.#ctor">
            <summary>
            Creates a new DictionaryBase. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Clear">
            <summary>
            Clears the dictionary. This method must be overridden in the derived class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Remove(`0)">
            <summary>
            Removes a key from the dictionary. This method must be overridden in the derived class.
            </summary>
            <param name="key">Key to remove from the dictionary.</param>
            <returns>True if the key was found, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.TryGetValue(`0,`1@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, the value
            associated with that key is returned through the value parameter. This method must be
            overridden by the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="value">Returns the value associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Add(`0,`1)">
            <summary>
            Adds a new key-value pair to the dictionary. 
            </summary>
            <remarks>The default implementation of this method
            checks to see if the key already exists using 
            ContainsKey, then calls the indexer setter if the key doesn't
            already exist. </remarks>
            <param name="key">Key to add.</param>
            <param name="value">Value to associated with the key.</param>
            <exception cref="T:System.ArgumentException">key is already present in the dictionary</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.ContainsKey(`0)">
            <summary>
            Determines whether a given key is found
            in the dictionary.
            </summary>
            <remarks>The default implementation simply calls TryGetValue and returns
            what it returns.</remarks>
            <param name="key">Key to look for in the dictionary.</param>
            <returns>True if the key is present in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.ToString">
            <summary>
            Shows the string representation of the dictionary. The string representation contains
            a list of the mappings in the dictionary.
            </summary>
            <returns>The string representation of the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.AsReadOnly">
            <summary>
            Provides a read-only view of this dictionary. The returned IDictionary&lt;TKey,TValue&gt; provides
            a view of the dictionary that prevents modifications to the dictionary. Use the method to provide
            access to the dictionary without allowing changes. Since the returned object is just a view,
            changes to the dictionary will be reflected in the view.
            </summary>
            <returns>An IIDictionary&lt;TKey,TValue&gt; that provides read-only access to the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Adds a key-value pair to the collection. This implementation calls the Add method
            with the Key and Value from the item.
            </summary>
            <param name="item">A KeyValuePair contains the Key and Value to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the
            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)
            the value.
            </summary>
            <param name="item">A KeyValuePair containing the Key and Value to check for.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Determines if a dictionary contains a given KeyValuePair, and if so, removes it. This implementation checks to see if the
            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)
            the value. If so, the key-value pair is removed.
            </summary>
            <param name="item">A KeyValuePair containing the Key and Value to check for.</param>
            <returns>True if the item was found and removed. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.CheckGenericType``1(System.String,System.Object)">
            <summary>
            Check that the given parameter is of the expected generic type. Throw an ArgumentException
            if it isn't.
            </summary>
            <typeparam name="ExpectedType">Expected type of the parameter</typeparam>
            <param name="name">parameter name</param>
            <param name="value">parameter value</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)">
            <summary>
            Adds a key-value pair to the collection. If key or value are not of the expected types, an
            ArgumentException is thrown. If both key and value are of the expected types, the (overridden)
            Add method is called with the key and value to add.
            </summary>
            <param name="key">Key to add to the dictionary.</param>
            <param name="value">Value to add to the dictionary.</param>
            <exception cref="T:System.ArgumentException">key or value are not of the expected type for this dictionary.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Clear">
            <summary>
            Clears this dictionary. Calls the (overridden) Clear method.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. The dictionary
            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct
            TKey for the dictionary, false is returned.
            </summary>
            <param name="key">The key to search for.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)">
            <summary>
            Removes the key (and associated value) from the collection that is equal to the passed in key. If
            no key in the dictionary is equal to the passed key, the 
            dictionary is unchanged. Calls the (overridden) Remove method. If key is not of the correct
            TKey for the dictionary, the dictionary is unchanged.
            </summary>
            <param name="key">The key to remove.</param>
            <exception cref="T:System.ArgumentException">key could not be converted to TKey.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is 
            returned as a DictionaryEntry.
            The entries are enumerated in the same orders as the (overridden) GetEnumerator
            method.
            </summary>
            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is 
            returned as a DictionaryEntry.
            The entries are enumerated in the same orders as the (overridden) GetEnumerator
            method.
            </summary>
            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.DebuggerDisplayString">
            <summary>
            Display the contents of the dictionary in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Item(`0)">
            <summary>
            The indexer of the dictionary. This is used to store keys and values and
            retrieve values from the dictionary. The setter
            accessor must be overridden in the derived class.
            </summary>
            <param name="key">Key to find in the dictionary.</param>
            <returns>The value associated with the key.</returns>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">Thrown from the get accessor if the key
            was not found in the dictionary.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Keys">
            <summary>
            Returns a collection of the keys in this dictionary. 
            </summary>
            <value>A read-only collection of the keys in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.Values">
            <summary>
            Returns a collection of the values in this dictionary. The ordering of 
            values in this collection is the same as that in the Keys collection.
            </summary>
            <value>A read-only collection of the values in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsFixedSize">
            <summary>
            Returns whether this dictionary is fixed size. This implemented always returns false.
            </summary>
            <value>Always returns false.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#IsReadOnly">
            <summary>
            Returns if this dictionary is read-only. This implementation always returns false.
            </summary>
            <value>Always returns false.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Keys">
            <summary>
            Returns a collection of all the keys in the dictionary. The values in this collection will
            be enumerated in the same order as the (overridden) GetEnumerator method.
            </summary>
            <value>The collection of keys.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Values">
            <summary>
            Returns a collection of all the values in the dictionary. The values in this collection will
            be enumerated in the same order as the (overridden) GetEnumerator method.
            </summary>
            <value>The collection of values.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.DictionaryBase`2.System#Collections#IDictionary#Item(System.Object)">
            <summary>
            Gets or sets the value associated with a given key. When getting a value, if this
            key is not found in the collection, then null is returned. When setting
            a value, the value replaces any existing value in the dictionary. If either the key or value
            are not of the correct type for this dictionary, an ArgumentException is thrown.
            </summary>
            <value>The value associated with the key, or null if the key was not present.</value>
            <exception cref="T:System.ArgumentException">key could not be converted to TKey, or value could not be converted to TValue.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.DictionaryBase`2.KeysCollection">
            <summary>
            A private class that implements ICollection&lt;TKey&gt; and ICollection for the
            Keys collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1">
            <summary>
            ReadOnlyCollectionBase is a base class that can be used to more easily implement the
            generic ICollection&lt;T&gt; and non-generic ICollection interfaces for a read-only collection:
            a collection that does not allow adding or removing elements.
            </summary>
            <remarks>
            <para>To use ReadOnlyCollectionBase as a base class, the derived class must override
            the Count and GetEnumerator methods. </para>
            <para>ICollection&lt;T&gt;.Contains need not be implemented by the
            derived class, but it should be strongly considered, because the ReadOnlyCollectionBase implementation
            may not be very efficient.</para>
            </remarks>
            <typeparam name="T">The item type of the collection.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.#ctor">
            <summary>
            Creates a new ReadOnlyCollectionBase. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.ToString">
            <summary>
            Shows the string representation of the collection. The string representation contains
            a list of the items in the collection.
            </summary>
            <returns>The string representation of the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.Exists(System.Predicate{`0})">
            <summary>
            Determines if the collection contains any item that satisfies the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if the collection contains one or more items that satisfy the condition
            defined by <paramref name="predicate"/>. False if the collection does not contain
            an item that satisfies <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.TrueForAll(System.Predicate{`0})">
            <summary>
            Determines if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>True if all of the items in the collection satisfy the condition
            defined by <paramref name="predicate"/>, or if the collection is empty. False if one or more items
            in the collection do not satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.CountWhere(System.Predicate{`0})">
            <summary>
            Counts the number of items in the collection that satisfy the condition
            defined by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>The number of items in the collection that satisfy <paramref name="predicate"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.FindAll(System.Predicate{`0})">
            <summary>
            Enumerates the items in the collection that satisfy the condition defined
            by <paramref name="predicate"/>.
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the items that satisfy the condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.ForEach(System.Action{`0})">
            <summary>
            Performs the specified action on each item in this collection.
            </summary>
            <param name="action">An Action delegate which is invoked for each item in this collection.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.ConvertAll``1(System.Converter{`0,``0})">
            <summary>
            Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration
            contains the result of applying <paramref name="converter"/> to each item in this collection, in
            order.
            </summary>
            <typeparam name="TOutput">The type each item is being converted to.</typeparam>
            <param name="converter">A delegate to the method to call, passing each item in this collection.</param>
            <returns>An IEnumerable&lt;TOutput^gt; that enumerates the resulting collection from applying <paramref name="converter"/> to each item in this collection in
            order.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="converter"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Add(`0)">
            <summary>
            This method throws an NotSupportedException
            stating the collection is read-only.
            </summary>
            <param name="item">Item to be added to the collection.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Clear">
            <summary>
            This method throws an NotSupportedException
            stating the collection is read-only.
            </summary>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#Remove(`0)">
            <summary>
            This method throws an NotSupportedException
            stating the collection is read-only.
            </summary>
            <param name="item">Item to be removed from the collection.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.Contains(`0)">
            <summary>
            Determines if the collection contains a particular item. This default implementation
            iterates all of the items in the collection via GetEnumerator, testing each item
            against <paramref name="item"/> using IComparable&lt;T&gt;.Equals or
            Object.Equals.
            </summary>
            <remarks>You should strongly consider overriding this method to provide
            a more efficient implementation.</remarks>
            <param name="item">The item to check for in the collection.</param>
            <returns>True if the collection contains <paramref name="item"/>, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies all the items in the collection into an array. Implemented by
            using the enumerator returned from GetEnumerator to get all the items
            and copy them to the provided array.
            </summary>
            <param name="array">Array to copy to.</param>
            <param name="arrayIndex">Starting index in <paramref name="array"/> to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.ToArray">
            <summary>
            Creates an array of the correct size, and copies all the items in the 
            collection into the array, by calling CopyTo.
            </summary>
            <returns>An array containing all the elements in the collection, in order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.GetEnumerator">
            <summary>
            Must be overridden to enumerate all the members of the collection.
            </summary>
            <returns>A generic IEnumerator&lt;T&gt; that can be used
            to enumerate all the items in the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#CopyTo(System.Array,System.Int32)">
            <summary>
            Copies all the items in the collection into an array. Implemented by
            using the enumerator returned from GetEnumerator to get all the items
            and copy them to the provided array.
            </summary>
            <param name="array">Array to copy to.</param>
            <param name="index">Starting index in <paramref name="array"/> to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Provides an IEnumerator that can be used to iterate all the members of the
            collection. This implementation uses the IEnumerator&lt;T&gt; that was overridden
            by the derived classes to enumerate the members of the collection.
            </summary>
            <returns>An IEnumerator that can be used to iterate the collection.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.DebuggerDisplayString">
            <summary>
            Display the contents of the collection in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.Count">
            <summary>
            Must be overridden to provide the number of items in the collection.
            </summary>
            <value>The number of items in the collection.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#Generic#ICollection{T}#IsReadOnly">
            <summary>
            Indicates whether the collection is read-only. Returns the value
            of readOnly that was provided to the constructor.
            </summary>
            <value>Always true.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#IsSynchronized">
            <summary>
            Indicates whether the collection is synchronized.
            </summary>
            <value>Always returns false, indicating that the collection is not synchronized.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyCollectionBase`1.System#Collections#ICollection#SyncRoot">
            <summary>
            Indicates the synchronization object for this collection.
            </summary>
            <value>Always returns this.</value>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.KeysCollection.#ctor(CodeSmith.Engine.PowerCollections.DictionaryBase{`0,`1})">
            <summary>
            Constructor.
            </summary>
            <param name="myDictionary">The dictionary this is associated with.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.DictionaryBase`2.ValuesCollection">
            <summary>
            A private class that implements ICollection&lt;TValue&gt; and ICollection for the
            Values collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper">
            <summary>
            A class that wraps a IDictionaryEnumerator around an IEnumerator that
            enumerates KeyValuePairs. This is useful in implementing IDictionary, because
            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.DictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Constructor.
            </summary>
            <param name="enumerator">The enumerator of KeyValuePairs that is being wrapped.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Hash`1">
             <summary>
             The base implementation for various collections classes that use hash tables
             as part of their implementation. This class should not (and can not) be 
             used directly by end users; it's only for internal use by the collections package. The Hash
             does not handle duplicate values.
             </summary>
             <remarks>
             The Hash manages items of type T, and uses a IComparer&lt;ItemTYpe&gt; that
             hashes compares items to hash items into the table.  
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Constructor. Create a new hash table.
            </summary>
            <param name="equalityComparer">The comparer to use to compare items. </param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetEnumerationStamp">
            <summary>
            Gets the current enumeration stamp. Call CheckEnumerationStamp later
            with this value to throw an exception if the hash table is changed.
            </summary>
            <returns>The current enumeration stamp.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.StopEnumerations">
            <summary>
            Must be called whenever there is a structural change in the tree. Causes
            changeStamp to be changed, which causes any in-progress enumerations
            to throw exceptions.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.CheckEnumerationStamp(System.Int32)">
            <summary>
            Checks the given stamp against the current change stamp. If different, the
            collection has changed during enumeration and an InvalidOperationException
            must be thrown
            </summary>
            <param name="startStamp">changeStamp at the start of the enumeration.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetFullHash(`0)">
            <summary>
            Gets the full hash code for an item.
            </summary>
            <param name="item">Item to get hash code for.</param>
            <returns>The full hash code. It is never zero.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetHashValuesFromFullHash(System.Int32,System.Int32@,System.Int32@)">
            <summary>
            Get the initial bucket number and skip amount from the full hash value.
            </summary>
            <param name="hash">The full hash value.</param>
            <param name="initialBucket">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>
            <param name="skip">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetHashValues(`0,System.Int32@,System.Int32@)">
            <summary>
            Gets the full hash value, initial bucket number, and skip amount for an item.
            </summary>
            <param name="item">Item to get hash value of.</param>
            <param name="initialBucket">Returns the initial bucket. Always in the range 0..(totalSlots - 1).</param>
            <param name="skip">Returns the skip values. Always odd in the range 0..(totalSlots - 1).</param>
            <returns>The full hash value. This is never zero.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.EnsureEnoughSlots(System.Int32)">
            <summary>
            Make sure there are enough slots in the hash table that <paramref name="additionalItems"/>
            items can be inserted into the table.
            </summary>
            <param name="additionalItems">Number of additional items we are inserting.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.ShrinkIfNeeded">
            <summary>
            Check if the number of items in the table is small enough that
            we should shrink the table again.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetSecondaryShift(System.Int32)">
            <summary>
            Given the size of a hash table, compute the "secondary shift" value -- the shift
            that is used to determine the skip amount for collision resolution.
            </summary>
            <param name="newSize">The new size of the table.</param>
            <returns>The secondary skip amount.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.ResizeTable(System.Int32)">
            <summary>
            Resize the hash table to the given new size, moving all items into the
            new hash table.
            </summary>
            <param name="newSize">The new size of the hash table. Must be a power
            of two.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.Insert(`0,System.Boolean,`0@)">
            <summary>
            Insert a new item into the hash table. If a duplicate item exists, can replace or
            do nothing.
            </summary>
            <param name="item">The item to insert.</param>
            <param name="replaceOnDuplicate">If true, duplicate items are replaced. If false, nothing
            is done if a duplicate already exists.</param>
            <param name="previous">If a duplicate was found, returns it (whether replaced or not).</param>
            <returns>True if no duplicate existed, false if a duplicate was found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.Delete(`0,`0@)">
            <summary>
            Deletes an item from the hash table. 
            </summary>
            <param name="item">Item to search for and delete.</param>
            <param name="itemDeleted">If true returned, the actual item stored in the hash table (must be 
            equal to <paramref name="item"/>, but may not be identical.</param>
            <returns>True if item was found and deleted, false if item wasn't found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.Find(`0,System.Boolean,`0@)">
            <summary>
            Find an item in the hash table. If found, optionally replace it with the
            finding item.
            </summary>
            <param name="find">Item to find.</param>
            <param name="replace">If true, replaces the equal item in the hash table
            with <paramref name="item"/>.</param>
            <param name="item">Returns the equal item found in the table, if true was returned.</param>
            <returns>True if the item was found, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.GetEnumerator">
            <summary>
            Enumerate all of the items in the hash table. The items
            are enumerated in a haphazard, unpredictable order.
            </summary>
            <returns>An IEnumerator&lt;T&gt; that enumerates the items
            in the hash table.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Enumerate all of the items in the hash table. The items
            are enumerated in a haphazard, unpredictable order.
            </summary>
            <returns>An IEnumerator that enumerates the items
            in the hash table.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.Clone(System.Converter{`0,`0})">
            <summary>
            Creates a clone of this hash table.
            </summary>
            <param name="cloneItem">If non-null, this function is applied to each item when cloning. It must be the 
            case that this function does not modify the hash code or equality function.</param>
            <returns>A shallow clone that contains the same items.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.System#Runtime#Serialization#ISerializable#GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Serialize the hash table. Called from the serialization infrastructure.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Called on deserialization. We cannot deserialize now, because hash codes
            might not be correct now. We do real deserialization in the OnDeserialization call.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.System#Runtime#Serialization#IDeserializationCallback#OnDeserialization(System.Object)">
            <summary>
            Deserialize the hash table. Called from the serialization infrastructure when 
            the object graph has finished deserializing.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.ElementCount">
            <summary>
            Get the number of items in the hash table.
            </summary>
            <value>The number of items stored in the hash table.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.SlotCount">
            <summary>
            Get the number of slots in the hash table. Exposed internally
            for testing purposes.
            </summary>
            <value>The number of slots in the hash table.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.LoadFactor">
            <summary>
            Get or change the load factor. Changing the load factor may cause
            the size of the table to grow or shrink accordingly.
            </summary>
            <value></value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Hash`1.Slot">
            <summary>
            The structure that has each slot in the hash table. Each slot has three parts:
            1. The collision bit. Indicates whether some item visited this slot but had to
            keep looking because the slot was full. 
            2. 31-bit full hash value of the item. If zero, the slot is empty.
            3. The item itself.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Hash`1.Slot.Clear">
            <summary>
            Clear this slot, leaving the collision bit alone.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.Slot.HashValue">
            <summary>
            The full hash value associated with the value in this slot, or zero
            if the slot is empty.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.Slot.Empty">
            <summary>
            Is this slot empty?
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Hash`1.Slot.Collision">
            <summary>
            The "Collision" bit indicates that some value hit this slot and
            collided, so had to try another slot.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionary`2">
             <summary>
             <para>The MultiDictionary class that associates values with a key. Unlike an Dictionary,
             each key can have multiple values associated with it. When indexing an MultiDictionary, instead
             of a single value associated with a key, you retrieve an enumeration of values.</para>
             <para>When constructed, you can chose to allow the same value to be associated with a key multiple
             times, or only one time. </para>
             </summary>
             <typeparam name="TKey">The type of the keys.</typeparam>
             <typeparam name="TValue">The of values associated with the keys.</typeparam>
            <seealso cref="T:System.Collections.Generic.Dictionary`2"/>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2"/>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2">
            <summary>
            MultiDictionaryBase is a base class that can be used to more easily implement a class
            that associates multiple values to a single key. The class implements the generic
            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface.
            </summary>
            <remarks>
            <para>To use MultiDictionaryBase as a base class, the derived class must override
            Count, Clear, Add, Remove(TKey), Remove(TKey,TValue), Contains(TKey,TValue), 
            EnumerateKeys, and TryEnumerateValuesForKey. </para>
            <para>It may wish consider overriding CountValues, CountAllValues, ContainsKey,
            and EqualValues, but these are not required.
            </para>
            </remarks>
            <typeparam name="TKey">The key type of the dictionary.</typeparam>
            <typeparam name="TValue">The value type of the dictionary.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.#ctor">
            <summary>
            Creates a new MultiDictionaryBase. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Clear">
            <summary>
            Clears the dictionary. This method must be overridden in the derived class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.EnumerateKeys">
            <summary>
            Enumerate all the keys in the dictionary. This method must be overridden by a derived
            class.
            </summary>
            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that
            have at least one value associated with them.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)">
            <summary>
            Enumerate all of the values associated with a given key. This method must be overridden
            by the derived class. If the key exists and has values associated with it, an enumerator for those
            values is returned throught <paramref name="values"/>. If the key does not exist, false is returned.
            </summary>
            <param name="key">The key to get values for.</param>
            <param name="values">If true is returned, this parameter receives an enumerators that
            enumerates the values associated with that key.</param>
            <returns>True if the key exists and has values associated with it. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Add(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})">
            <summary>
            Adds a key-value pair to the collection. The value part of the pair must be a collection
            of values to associate with the key. If values are already associated with the given
            key, the new values are added to the ones associated with that key.
            </summary>
            <param name="item">A KeyValuePair contains the Key and Value collection to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})">
            <summary>
            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the 
            key is already present, and ArgumentException is thrown. Otherwise, a
            new key is added, and new values are associated with that key.
            </summary>
            <param name="key">Key to add.</param>
            <param name="values">Values to associate with that key.</param>
            <exception cref="T:System.ArgumentException">The key is already present in the dictionary.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.AddMany(`0,System.Collections.Generic.IEnumerable{`1})">
            <summary>
            <para>Adds new values to be associated with a key. If duplicate values are permitted, this
            method always adds new key-value pairs to the dictionary.</para>
            <para>If duplicate values are not permitted, and <paramref name="key"/> already has a value
            equal to one of <paramref name="values"/> associated with it, then that value is replaced,
            and the number of values associate with <paramref name="key"/> is unchanged.</para>
            </summary>
            <param name="key">The key to associate with.</param>
            <param name="values">A collection of values to associate with <paramref name="key"/>.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Add(`0,`1)">
            <summary>
            Adds a new key-value pair to the dictionary.  This method must be overridden in the derived class.
            </summary>
            <param name="key">Key to add.</param>
            <param name="value">Value to associated with the key.</param>
            <exception cref="T:System.ArgumentException">key is already present in the dictionary</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Remove(`0)">
            <summary>
            Removes a key from the dictionary. This method must be overridden in the derived class.
            </summary>
            <param name="key">Key to remove from the dictionary.</param>
            <returns>True if the key was found, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Remove(`0,`1)">
            <summary>
            Removes a key-value pair from the dictionary. This method must be overridden in the derived class.
            </summary>
            <param name="key">Key to remove from the dictionary.</param>
            <param name="value">Associated value to remove from the dictionary.</param>
            <returns>True if the key-value pair was found, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Remove(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})">
            <summary>
            Removes a set of values from a given key. If all values associated with a key are
            removed, then the key is removed also.
            </summary>
            <param name="pair">A KeyValuePair contains a key and a set of values to remove from that key.</param>
            <returns>True if at least one values was found and removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.RemoveMany(`0,System.Collections.Generic.IEnumerable{`1})">
            <summary>
            Removes a collection of values from the values associated with a key. If the
            last value is removed from a key, the key is removed also.
            </summary>
            <param name="key">A key to remove values from.</param>
            <param name="values">A collection of values to remove.</param>
            <returns>The number of values that were present and removed. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Remove all of the keys (and any associated values) in a collection
            of keys. If a key is not present in the dictionary, nothing happens.
            </summary>
            <param name="keyCollection">A collection of key values to remove.</param>
            <returns>The number of keys from the collection that were present and removed.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, all the values
            associated with that key are returned through the values parameter. This method must be
            overridden by the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="values">Returns all values associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ContainsKey(`0)">
            <summary>
            Determines whether a given key is found in the dictionary.
            </summary>
            <remarks>The default implementation simply calls TryEnumerateValuesForKey.
            It may be appropriate to override this method to 
            provide a more efficient implementation.</remarks>
            <param name="key">Key to look for in the dictionary.</param>
            <returns>True if the key is present in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Contains(`0,`1)">
            <summary>
            Determines if this dictionary contains a key-value pair equal to <paramref name="key"/> and 
            <paramref name="value"/>. The dictionary is not changed. This method must be overridden in the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="value">The value to search for.</param>
            <returns>True if the dictionary has associated <paramref name="value"/> with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})">
            <summary>
            Determines if this dictionary contains the given key and all of the values associated with that key..
            </summary>
            <param name="pair">A key and collection of values to search for.</param>
            <returns>True if the dictionary has associated all of the values in <paramref name="pair"/>.Value with <paramref name="pair"/>.Key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.EqualValues(`1,`1)">
            <summary>
            If the derived class does not use the default comparison for values, this
            methods should be overridden to compare two values for equality. This is
            used for the correct implementation of ICollection.Contains on the Values
            and KeyValuePairs collections.
            </summary>
            <param name="value1">First value to compare.</param>
            <param name="value2">Second value to compare.</param>
            <returns>True if the values are equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.CountValues(`0)">
            <summary>
            Gets a count of the number of values associated with a key. The
            default implementation is slow; it enumerators all of the values
            (using TryEnumerateValuesForKey) to count them. A derived class
            may be able to supply a more efficient implementation.
            </summary>
            <param name="key">The key to count values for.</param>
            <returns>The number of values associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.CountAllValues">
            <summary>
            Gets a total count of values in the collection. This default implementation
            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.
            A derived class may be able to supply a more efficient implementation.
            </summary>
            <returns>The total number of values associated with all keys in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Replace(`0,`1)">
            <summary>
            Replaces all values associated with <paramref name="key"/> with the single value <paramref name="value"/>.
            </summary>
            <remarks>This implementation simply calls Remove, followed by Add.</remarks>
            <param name="key">The key to associate with.</param>
            <param name="value">The new values to be associated with <paramref name="key"/>.</param>
            <returns>Returns true if some values were removed. Returns false if <paramref name="key"/> was not
            present in the dictionary before Replace was called.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ReplaceMany(`0,System.Collections.Generic.IEnumerable{`1})">
            <summary>
            Replaces all values associated with <paramref name="key"/> with a new collection
            of values. If the collection does not permit duplicate values, and <paramref name="values"/> has duplicate
            items, then only the last of duplicates is added.
            </summary>
            <param name="key">The key to associate with.</param>
            <param name="values">The new values to be associated with <paramref name="key"/>.</param>
            <returns>Returns true if some values were removed. Returns false if <paramref name="key"/> was not
            present in the dictionary before Replace was called.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ToString">
            <summary>
            Shows the string representation of the dictionary. The string representation contains
            a list of the mappings in the dictionary.
            </summary>
            <returns>The string representation of the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.DebuggerDisplayString">
            <summary>
            Display the contents of the dictionary in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.GetEnumerator">
            <summary>
            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.
            </summary>
            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Count">
            <summary>
            Gets the number of keys in the dictionary. This property must be overridden
            in the derived class.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Keys">
            <summary>
            Gets a read-only collection all the keys in this dictionary.
            </summary>
            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Values">
            <summary>
            Gets a read-only collection of all the values in the dictionary. 
            </summary>
            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values">
            <summary>
            Gets a read-only collection of all the value collections in the dictionary. 
            </summary>
            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.KeyValuePairs">
            <summary>
            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple
            values associated with it, then a key-value pair is present for each value associated
            with the key.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.Item(`0)">
            <summary>
            Returns a collection of all of the values in the dictionary associated with <paramref name="key"/>,
            or changes the set of values associated with <paramref name="key"/>.
            If the key is not present in the dictionary, an ICollection enumerating no
            values is returned. The returned collection of values is read-write, and can be used to 
            modify the collection of values associated with the key.
            </summary>
            <param name="key">The key to get the values associated with.</param>
            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name="key"/>.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)">
            <summary>
            Gets a collection of all the values in the dictionary associated with <paramref name="key"/>,
            or changes the set of values associated with <paramref name="key"/>.
            If the key is not present in the dictionary, a KeyNotFound exception is thrown.
            </summary>
            <param name="key">The key to get the values associated with.</param>
            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name="key"/>.</value>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">The given key is not present in the dictionary.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection">
            <summary>
            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection
            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,
            etc. values from the multi-dictionary.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.#ctor(CodeSmith.Engine.PowerCollections.MultiDictionaryBase{`0,`1},`0)">
            <summary>
            Constructor. Initializes this collection.
            </summary>
            <param name="myDictionary">Dictionary we're using.</param>
            <param name="key">The key we're looking at.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Clear">
            <summary>
            Remove the key and all values associated with it.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Add(`1)">
            <summary>
            Add a new values to this key.
            </summary>
            <param name="item">New values to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Remove(`1)">
            <summary>
            Remove a value currently associated with key.
            </summary>
            <param name="item">Value to remove.</param>
            <returns>True if item was assocaited with key, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.NoValues">
            <summary>
            A simple function that returns an IEnumerator&lt;TValue&gt; that
            doesn't yield any values. A helper.
            </summary>
            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator">
            <summary>
            Enumerate all the values associated with key.
            </summary>
            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)">
            <summary>
            Determines if the given values is associated with key.
            </summary>
            <param name="item">Value to check for.</param>
            <returns>True if value is associated with key, false otherwise.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesForKeyCollection.Count">
            <summary>
            Get the number of values associated with the key.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.KeysCollection">
            <summary>
            A private class that implements ICollection&lt;TKey&gt; and ICollection for the
            Keys collection. The collection is read-only.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.KeysCollection.#ctor(CodeSmith.Engine.PowerCollections.MultiDictionaryBase{`0,`1})">
            <summary>
            Constructor.
            </summary>
            <param name="myDictionary">The dictionary this is associated with.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.ValuesCollection">
            <summary>
            A private class that implements ICollection&lt;TValue&gt; and ICollection for the
            Values collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.EnumerableValuesCollection">
            <summary>
            A private class that implements ICollection&lt;ICollection&lt;TValue&gt;&gt; and ICollection for the
            Values collection on IDictionary. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionaryBase`2.KeyValuePairsCollection">
            <summary>
            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the
            KeyValuePairs collection. The collection is read-only.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.#ctor(System.Boolean)">
            <summary>
            Create a new MultiDictionary. The default ordering of keys and values are used. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation
            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be
            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <exception cref="T:System.InvalidOperationException">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Create a new MultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyEqualityComparer">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>
            <exception cref="T:System.InvalidOperationException">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1})">
            <summary>
            Create a new MultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyEqualityComparer">An IEqualityComparer&lt;TKey&gt; instance that will be used to compare keys.</param>
            <param name="valueEqualityComparer">An IEqualityComparer&lt;TValue&gt; instance that will be used to compare values.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IEqualityComparer{`0},System.Collections.Generic.IEqualityComparer{`1},System.Collections.Generic.IEqualityComparer{CodeSmith.Engine.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues},CodeSmith.Engine.PowerCollections.Hash{CodeSmith.Engine.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues})">
            <summary>
            Create a new MultiDictionary. Private constructor, for use by Clone().
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Add(`0,`1)">
            <summary>
            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this
            method always adds a new key-value pair to the dictionary.</para>
            <para>If duplicate values are not permitted, and <paramref name="key"/> already has a value
            equal to <paramref name="value"/> associated with it, then that value is replaced with <paramref name="value"/>,
            and the number of values associate with <paramref name="key"/> is unchanged.</para>
            </summary>
            <param name="key">The key to associate with.</param>
            <param name="value">The value to associated with <paramref name="key"/>.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Remove(`0,`1)">
            <summary>
            Removes a given value from the values associated with a key. If the
            last value is removed from a key, the key is removed also.
            </summary>
            <param name="key">A key to remove a value from.</param>
            <param name="value">The value to remove.</param>
            <returns>True if <paramref name="value"/> was associated with <paramref name="key"/> (and was
            therefore removed). False if <paramref name="value"/> was not associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Remove(`0)">
            <summary>
            Removes a key and all associated values from the dictionary. If the
            key is not present in the dictionary, it is unchanged and false is returned.
            </summary>
            <param name="key">The key to remove.</param>
            <returns>True if the key was present and was removed. Returns 
            false if the key was not present.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Clear">
            <summary>
            Removes all keys and values from the dictionary.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.EqualValues(`1,`1)">
            <summary>
            Determine if two values are equal.
            </summary>
            <param name="value1">First value to compare.</param>
            <param name="value2">Second value to compare.</param>
            <returns>True if the values are equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Contains(`0,`1)">
            <summary>
            Checks to see if <paramref name="value"/> is associated with <paramref name="key"/>
            in the dictionary.
            </summary>
            <param name="key">The key to check.</param>
            <param name="value">The value to check.</param>
            <returns>True if <paramref name="value"/> is associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.ContainsKey(`0)">
            <summary>
            Checks to see if the key is present in the dictionary and has
            at least one value associated with it.
            </summary>
            <param name="key">The key to check.</param>
            <returns>True if <paramref name="key"/> is present and has at least
            one value associated with it. Returns false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.EnumerateKeys">
            <summary>
            Enumerate all the keys in the dictionary. 
            </summary>
            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the dictionary that
            have at least one value associated with them.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.EnumerateValues(CodeSmith.Engine.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)">
            <summary>
             Enumerate the values in the a KeyAndValues structure. Can't return
            the array directly because:
              a) The array might be larger than the count.
              b) We can't allow clients to down-cast to the array and modify it.
              c) We have to abort enumeration if the hash changes.
            </summary>
            <param name="keyAndValues">Item with the values to enumerate..</param>
            <returns>An enumerable that enumerates the items in the KeyAndValues structure.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, all the values
            associated with that key are returned through the values parameter. 
            </summary>
            <param name="key">The key to search for.</param>
            <param name="values">Returns all values associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.CountValues(`0)">
            <summary>
            Gets the number of values associated with a given key.
            </summary>
            <param name="key">The key to count values of.</param>
            <returns>The number of values associated with <paramref name="key"/>. If <paramref name="key"/>
            is not present in the dictionary, zero is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Clone">
            <summary>
            Makes a shallow clone of this dictionary; i.e., if keys or values of the
            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.System#ICloneable#Clone">
            <summary>
            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.
            </summary>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.NonCloneableType(System.Type)">
            <summary>
            Throw an InvalidOperationException indicating that this type is not cloneable.
            </summary>
            <param name="t">Type to test.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.CloneContents">
            <summary>
            Makes a deep clone of this dictionary. A new dictionary is created with a clone of
            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If TKey or TValue is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>
            <returns>The cloned dictionary.</returns>
            <exception cref="T:System.InvalidOperationException">TKey or TValue is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyComparer">
            <summary>
            Returns the IEqualityComparer&lt;T&gt; used to compare keys in this dictionary. 
            </summary>
            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise
            the default comparer for TKey (EqualityComparer&lt;TKey&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionary`2.ValueComparer">
            <summary>
            Returns the IEqualityComparer&lt;T&gt; used to compare values in this dictionary. 
            </summary>
            <value>If the dictionary was created using a comparer, that comparer is returned. Otherwise
            the default comparer for TValue (EqualityComparer&lt;TValue&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.MultiDictionary`2.Count">
            <summary>
            Gets the number of key-value pairs in the dictionary. Each value associated
            with a given key is counted. If duplicate values are permitted, each duplicate
            value is included in the count.
            </summary>
            <value>The number of key-value pairs in the dictionary.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues">
            <summary>
            A structure to hold the key and the values associated with the key.
            The number of values must always be 1 or greater in a version that is stored, but 
            can be zero in a dummy version used only for lookups.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues.Key">
            <summary>
            The key.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues.Count">
            <summary>
            The number of values. Always at least 1 except in a dummy version for lookups.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues.Values">
            <summary>
            An array of values. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues.#ctor(`0)">
            <summary>
            Create a dummy KeyAndValues with just the key, for lookups.
            </summary>
            <param name="key">The key to use.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValues.Copy(CodeSmith.Engine.PowerCollections.MultiDictionary{`0,`1}.KeyAndValues)">
            <summary>
            Make a copy of a KeyAndValues, copying the array.
            </summary>
            <param name="x">KeyAndValues to copy.</param>
            <returns>A copied version.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.MultiDictionary`2.KeyAndValuesEqualityComparer">
            <summary>
            This class implements IEqualityComparer for KeysAndValues, allowing them to be
            compared by their keys. An IEqualityComparer on keys is required.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedBag`1">
             <summary>
             OrderedBag&lt;T&gt; is a collection that contains items of type T. 
             The item are maintained in a sorted order. Unlike a OrderedSet, duplicate items (items that
             compare equal to each other) are allows in an OrderedBag.
             </summary>
             <remarks>
             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,
             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison
             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>
             <p>OrderedBag is implemented as a balanced binary tree. Inserting, deleting, and looking up an
             an element all are done in log(N) + M time, where N is the number of keys in the tree, and M is the current number
             of copies of the element being handled.</p>
             <p><see cref="T:CodeSmith.Engine.PowerCollections.Bag`1"/> is similar, but uses hashing instead of comparison, and does not maintain
             the keys in sorted order.</p>
            </remarks>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.Bag`1"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor">
             <summary>
             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;
             or IComparable. 
             The CompareTo method of this interface will be used to compare items in this bag.
             </summary>
            <remarks>
             Items that are null are permitted, and will be sorted before all other items.
            </remarks>
             <exception cref="T:System.InvalidOperationException">T does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Comparison{`0})">
            <summary>
            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.
            </summary>
            <param name="comparison">A delegate to a method that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new OrderedBag. The Compare method of the passed comparison object
            will be used to compare items in this bag.
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never
            be called, and need not be implemented.
            </remarks>
            <param name="comparer">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
             <summary>
             Creates a new OrderedBag. The T must implement IComparable&lt;T&gt;
             or IComparable. 
             The CompareTo method of this interface will be used to compare items in this bag. The bag is
             initialized with all the items in the given collection.
             </summary>
            <remarks>
             Items that are null are permitted, and will be sorted before all other items.
            </remarks>
             <param name="collection">A collection with items to be placed into the OrderedBag.</param>
             <exception cref="T:System.InvalidOperationException">T does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})">
            <summary>
            Creates a new OrderedBag. The passed delegate will be used to compare items in this bag.
            The bag is initialized with all the items in the given collection.
            </summary>
            <param name="collection">A collection with items to be placed into the OrderedBag.</param>
            <param name="comparison">A delegate to a method that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new OrderedBag. The Compare method of the passed comparison object
            will be used to compare items in this bag. The bag is
            initialized with all the items in the given collection.
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never
            be called, and need not be implemented.
            </remarks>
            <param name="collection">A collection with items to be placed into the OrderedBag.</param>
            <param name="comparer">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.#ctor(System.Collections.Generic.IComparer{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0})">
            <summary>
            Creates a new OrderedBag given a comparer and a tree that contains the data. Used
            internally for Clone.
            </summary>
            <param name="comparer">Comparer for the bag.</param>
            <param name="tree">Data for the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.System#ICloneable#Clone">
            <summary>
            Makes a shallow clone of this bag; i.e., if items of the
            bag are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>
            <returns>The cloned bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Clone">
            <summary>
            Makes a shallow clone of this bag; i.e., if items of the
            bag are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the bag takes time O(N), where N is the number of items in the bag.</remarks>
            <returns>The cloned bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.CloneContents">
            <summary>
            Makes a deep clone of this bag. A new bag is created with a clone of
            each element of this bag, by calling ICloneable.Clone on each element. If T is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the bag takes time O(N log N), where N is the number of items in the bag.</para></remarks>
            <returns>The cloned bag.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.NumberOfCopies(`0)">
            <summary>
            Returns the number of copies of <paramref name="item"/> in the bag. More precisely, returns
            the number of items in the bag that compare equal to <paramref name="item"/>.
            </summary>
            <remarks>NumberOfCopies() takes time O(log N + M), where N is the total number of items in the
            bag, and M is the number of copies of <paramref name="item"/> in the bag.</remarks>
            <param name="item">The item to search for in the bag.</param>
            <returns>The number of items in the bag that compare equal to <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the items in the bag. 
            The items are enumerated in sorted order.
            </summary>
            <remarks>
            <p>Typically, this method is not called directly. Instead the "foreach" statement is used
            to enumerate the items, which uses this method implicitly.</p>
            <p>If an item is added to or deleted from the bag while it is being enumerated, then 
            the enumeration will end with an InvalidOperationException.</p>
            <p>Enumeration all the items in the bag takes time O(N), where N is the number
            of items in the bag.</p>
            </remarks>
            <returns>An enumerator for enumerating all the items in the OrderedBag.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Contains(`0)">
            <summary>
            Determines if this bag contains an item equal to <paramref name="item"/>. The bag
            is not changed.
            </summary>
            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the bag contains <paramref name="item"/>. False if the bag does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.GetEqualItems(`0)">
            <summary>
            <para>Enumerates all of the items in this bag that are equal to <paramref name="item"/>, according to the 
            comparison mechanism that was used when the bag was created. The bag
            is not changed.</para>
            <para>If the bag does contain an item equal to <paramref name="item"/>, then the enumeration contains
            no items.</para>
            </summary>
            <remarks>Enumeration the items in the bag equal to <paramref name="item"/> takes time O(log N + M), where N 
            is the total number of items in the bag, and M is the number of items equal to <paramref name="item"/>.</remarks>
            <param name="item">The item to search for.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates all the items in the bag equal to <paramref name="item"/>. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.DistinctItems">
            <summary>
            Enumerates all the items in the bag, but enumerates equal items
            just once, even if they occur multiple times in the bag.
            </summary>
            <remarks>If the bag is changed while items are being enumerated, the
            enumeration will terminate with an InvalidOperationException.</remarks>
            <returns>An IEnumerable&lt;T&gt; that enumerates the unique items.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.LastIndexOf(`0)">
            <summary>
            Get the index of the given item in the sorted order. The smallest item has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. If multiple
            equal items exist, the largest index of the equal items is returned.
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the last item in the sorted bag equal to <paramref name="item"/>, or -1 if the item is not present
            in the set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IndexOf(`0)">
            <summary>
            Get the index of the given item in the sorted order. The smallest item has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. If multiple
            equal items exist, the smallest index of the equal items is returned.
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the first item in the sorted bag equal to <paramref name="item"/>, or -1 if the item is not present
            in the set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Add(`0)">
            <summary>
            Adds a new item to the bag. Since bags can contain duplicate items, the item 
            is added even if the bag already contains an item equal to <paramref name="item"/>. In
            this case, the new item is placed after all equal items already present in the bag.
            </summary>
            <remarks>
            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>
            <param name="item">The item to add to the bag.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.AddMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds all the items in <paramref name="collection"/> to the bag. 
            </summary>
            <remarks>
            <para>Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to add to the bag.</param>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Remove(`0)">
            <summary>
            Searches the bag for one item equal to <paramref name="item"/>, and if found,
            removes it from the bag. If not found, the bag is unchanged. If more than one item
            equal to <paramref name="item"/>, the item that was last inserted is removed.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the bag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RemoveAllCopies(`0)">
            <summary>
            Searches the bag for all items equal to <paramref name="item"/>, and 
            removes all of them from the bag. If not found, the bag is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is
            the number of items equal to <paramref name="item"/>.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>The number of copies of <paramref name="item"/> that were found and removed. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Removes all the items in <paramref name="collection"/> from the bag. Items not
            present in the bag are ignored.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>Removing the collection takes time O(M log N), where N is the number of items in the bag, and M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to remove from the bag.</param>
            <returns>The number of items removed from the bag.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Clear">
            <summary>
            Removes all items from the bag.
            </summary>
            <remarks>Clearing the bag takes a constant amount of time, regardless of the number of items in it.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.CheckEmpty">
            <summary>
            If the collection is empty, throw an invalid operation exception.
            </summary>
            <exception cref="T:System.InvalidOperationException">The bag is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.GetFirst">
            <summary>
            Returns the first item in the bag: the item
            that would appear first if the bag was enumerated. This is also
            the smallest item in the bag.
            </summary>
            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The first item in the bag. If more than one item
            is smallest, the first one added is returned.</returns>
            <exception cref="T:System.InvalidOperationException">The bag is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.GetLast">
            <summary>
            Returns the last item in the bag: the item
            that would appear last if the bag was enumerated. This is also the largest
            item in the bag.
            </summary>
            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The last item in the bag. If more than one item
            is largest, the last one added is returned.</returns>
            <exception cref="T:System.InvalidOperationException">The bag is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RemoveFirst">
            <summary>
            Removes the first item in the bag. This is also the smallest
            item in the bag.
            </summary>
            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The item that was removed, which was the smallest item in the bag. </returns>
            <exception cref="T:System.InvalidOperationException">The bag is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RemoveLast">
            <summary>
            Removes the last item in the bag. This is also the largest item in the bag.
            </summary>
            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The item that was removed, which was the largest item in the bag. </returns>
            <exception cref="T:System.InvalidOperationException">The bag is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.CheckConsistentComparison(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Check that this bag and another bag were created with the same comparison
            mechanism. Throws exception if not compatible.
            </summary>
            <param name="otherBag">Other bag to check comparision mechanism.</param>
            <exception cref="T:System.InvalidOperationException">If otherBag and this bag don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsSupersetOf(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is a superset of another bag. Neither bag is modified.
            This bag is a superset of <paramref name="otherBag"/> if every element in
            <paramref name="otherBag"/> is also in this bag, at least the same number of
            times.
            </summary>
            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the 
            <paramref name="otherSet"/>, and N is the size of the this set.</remarks>
            <param name="otherBag">OrderedBag to compare to.</param>
            <returns>True if this is a superset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsProperSupersetOf(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is a proper superset of another bag. Neither bag is modified.
            This bag is a proper superset of <paramref name="otherBag"/> if every element in
            <paramref name="otherBag"/> is also in this bag, at least the same number of
            times. Additional, this bag must have strictly more items than <paramref name="otherBag"/>.
            </summary>
            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in 
            <paramref name="otherBag"/>.</remarks>
            <param name="otherBag">OrderedBag to compare to.</param>
            <returns>True if this is a proper superset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsSubsetOf(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is a subset of another bag. Neither bag is modified.
            This bag is a subset of <paramref name="otherBag"/> if every element in this bag
            is also in <paramref name="otherBag"/>, at least the same number of
            times.
            </summary>
            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the 
            <paramref name="otherBag"/>, and N is the size of the this bag.</remarks>
            <param name="otherBag">OrderedBag to compare to.</param>
            <returns>True if this is a subset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsProperSubsetOf(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is a proper subset of another bag. Neither bag is modified.
            This bag is a subset of <paramref name="otherBag"/> if every element in this bag
            is also in <paramref name="otherBag"/>, at least the same number of
            times. Additional, this bag must have strictly fewer items than <paramref name="otherBag"/>.
            </summary>
            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the 
            <paramref nameb="otherBag"/>, and N is the size of the this bag.</remarks>
            <param name="otherBag">OrderedBag to compare to.</param>
            <returns>True if this is a proper subset of <paramref name="otherBag"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsDisjointFrom(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is disjoint from another bag. Two bags are disjoint
            if no item from one set is equal to any item in the other bag.
            </summary>
            <remarks>
            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherBag">Bag to check disjointness with.</param>
            <returns>True if the two bags are disjoint, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IsEqualTo(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Determines if this bag is equal to another bag. This bag is equal to
            <paramref name="otherBag"/> if they contain the same items, each the
            same number of times.
            </summary>
            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in 
            this bag.</remarks>
            <param name="otherBag">OrderedBag to compare to</param>
            <returns>True if this bag is equal to <paramref name="otherBag"/>, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.UnionWith(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the union of this bag with another bag. The union of two bags
            is all items from both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives
            the union of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to union with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Union(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the union of this bag with another bag. The union of two bags
            is all items from both of the bags.  If an item appears X times in one bag,
            and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is 
            created with the union of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The union of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to union with.</param>
            <returns>The union of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.SumWith(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the sum of this bag with another bag. The sum of two bags
            is all items from both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives
            the sum of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to sum with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Sum(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the sum of this bag with another bag. he sum of two bags
            is all items from both of the bags.  If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is 
            created with the sum of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The sum of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to sum with.</param>
            <returns>The sum of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.IntersectionWith(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the intersection of this bag with another bag. The intersection of two bags
            is all items that appear in both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives
            the intersection of the two bags, the other bag is unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to intersection with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Intersection(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the intersection of this bag with another bag. The intersection of two bags
            is all items that appear in both of the bags. If an item appears X times in one bag,
            and Y times in the other bag, the sum contains the item Minimum(X,Y) times. A new bag is 
            created with the intersection of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both bags, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two bags is computed in time O(N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to intersection with.</param>
            <returns>The intersection of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.DifferenceWith(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the difference of this bag with another bag. The difference of these two bags
            is all items that appear in this bag, but not in <paramref name="otherBag"/>. If an item appears X times in this bag,
            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X). This bag receives
            the difference of the two bags; the other bag is unchanged.
            </summary>
            <remarks>
            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to difference with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Difference(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the difference of this bag with another bag. The difference of these two bags
            is all items that appear in this bag, but not in <paramref name="otherBag"/>. If an item appears X times in this bag,
            and Y times in the other bag, the difference contains the item X - Y times (zero times if Y &gt;= X).  A new bag is 
            created with the difference of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The difference of two bags is computed in time O(M + N log M), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to difference with.</param>
            <returns>The difference of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.SymmetricDifferenceWith(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags
            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,
            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). This bag receives
            the symmetric difference of the two bags; the other bag is unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to symmetric difference with.</param>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.SymmetricDifference(CodeSmith.Engine.PowerCollections.OrderedBag{`0})">
            <summary>
            Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags
            is all items that appear in either of the bags, but not both. If an item appears X times in one bag,
            and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). A new bag is 
            created with the symmetric difference of the bags and is returned. This bag and the other bag 
            are unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two bags is computed in time O(M + N), where M is the size of the 
            larger bag, and N is the size of the smaller bag.</para>
            </remarks>
            <param name="otherBag">Bag to symmetric difference with.</param>
            <returns>The symmetric difference of the two bags.</returns>
            <exception cref="T:System.InvalidOperationException">This bag and <paramref name="otherBag"/> don't use the same method for comparing items.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="otherBag"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.AsList">
            <summary>
            Get a read-only list view of the items in this ordered bag. The
            items in the list are in sorted order, with the smallest item
            at index 0. This view does not copy any data, and reflects any
            changes to the underlying OrderedBag.
            </summary>
            <returns>A read-only IList&lt;T&gt; view onto this OrderedBag.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Reversed">
             <summary>
             Returns a View collection that can be used for enumerating the items in the bag in 
             reversed order.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in bag.Reversed()) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the bag while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <returns>An OrderedBag.View of items in reverse order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.Range(`0,System.Boolean,`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the bag.
             Only items that are greater than <paramref name="from"/> and 
             less than <paramref name="to"/> are included. The items are enumerated in sorted order.
             Items equal to the end points of the range can be included or excluded depending on the
             <paramref name="fromInclusive"/> and <paramref name="toInclusive"/> parameters.
             </summary>
            <remarks>
            <p>If <paramref name="from"/> is greater than or equal to <paramref name="to"/>, the returned collection is empty. </p>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in bag.Range(from, true, to, false)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the bag while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--items equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not
             be included in the range.</param>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--items equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedBag.View of items in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RangeFrom(`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the bag.
             Only items that are greater than (and optionally, equal to) <paramref name="from"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="from"/> can be included
             or excluded depending on the <paramref name="fromInclusive"/> parameter.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in bag.RangeFrom(from, true)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the bag while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--items equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not
             be included in the range.</param>
             <returns>An OrderedBag.View of items in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.RangeTo(`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the bag.
             Only items that are less than (and optionally, equal to) <paramref name="to"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="to"/> can be included
             or excluded depending on the <paramref name="toInclusive"/> parameter.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in bag.RangeTo(to, false)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the bag while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--items equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedBag.View of items in the given range.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedBag`1.Comparer">
            <summary>
            Returns the IComparer&lt;T&gt; used to compare items in this bag. 
            </summary>
            <value>If the bag was created using a comparer, that comparer is returned. If the bag was
            created using a comparison delegate, then a comparer equivalent to that delegate
            is returned. Otherwise
            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedBag`1.Count">
            <summary>
            Returns the number of items in the bag.
            </summary>
            <remarks>The size of the bag is returned in constant time.</remarks>
            <value>The number of items in the bag.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedBag`1.Item(System.Int32)">
            <summary>
            Get the item by its index in the sorted order. The smallest item has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>The indexer takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="index">The index to get the item by.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedBag`1.ListView">
            <summary>
            The nested class that provides a read-only list view
            of all or part of the collection.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1">
            <summary>
            ReadOnlyListBase is an abstract class that can be used as a base class for a read-only collection that needs 
            to implement the generic IList&lt;T&gt; and non-generic IList collections. The derived class needs
            to override the Count property and the get part of the indexer. The implementation
            of all the other methods in IList&lt;T&gt; and IList are handled by ListBase.
            </summary>
            <typeparam name="T"></typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.#ctor">
            <summary>
            Creates a new ReadOnlyListBase.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.GetEnumerator">
            <summary>
            Enumerates all of the items in the list, in order. The item at index 0
            is enumerated first, then the item at index 1, and so on.
            </summary>
            <returns>An IEnumerator&lt;T&gt; that enumerates all the
            items in the list.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.Contains(`0)">
            <summary>
            Determines if the list contains any item that compares equal to <paramref name="item"/>.
            The implementation simply checks whether IndexOf(item) returns a non-negative value.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the list contains an item that compares equal to <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[])">
            <summary>
            Copies all the items in the list, in order, to <paramref name="array"/>,
            starting at index 0.
            </summary>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies all the items in the list, in order, to <paramref name="array"/>,
            starting at <paramref name="arrayIndex"/>.
            </summary>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count + arrayIndex.</param>
            <param name="arrayIndex">The starting index in <paramref name="array"/>
            to copy to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.CopyTo(System.Int32,`0[],System.Int32,System.Int32)">
            <summary>
            Copies a range of elements from the list to <paramref name="array"/>,
            starting at <paramref name="arrayIndex"/>.
            </summary>
            <param name="index">The starting index in the source list of the range to copy.</param>
            <param name="array">The array to copy to. This array must have a size
            that is greater than or equal to Count + arrayIndex.</param>
            <param name="arrayIndex">The starting index in <paramref name="array"/>
            to copy to.</param>
            <param name="count">The number of items to copy.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.Find(System.Predicate{`0})">
            <summary>
            Finds the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, than
            the default value for T (null or all-zero) is returned.
            </summary>
            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name="predicate"/>,
            and the list might contain the default value, then it is impossible to distinguish the different between finding
            the default value and not finding any item. To distinguish these cases, use <see cref="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)"/>.</remarks>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The first item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, the default value for T is returned.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFind(System.Predicate{`0},`0@)">
            <summary>
            Finds the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. 
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <param name="foundItem">If true is returned, this parameter receives the first item in the list
            that satifies the condition defined by <paramref name="predicate"/>.</param>
            <returns>True if an item that  satisfies the condition <paramref name="predicate"/> was found. False 
            if no item in the list satisfies that condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindLast(System.Predicate{`0})">
            <summary>
            Finds the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, than
            the default value for T (null or all-zero) is returned.
            </summary>
            <remarks>If the default value for T (null or all-zero) matches the condition defined by <paramref name="predicate"/>,
            and the list might contain the default value, then it is impossible to distinguish the different between finding
            the default value and not finding any item. To distinguish these cases, use <see cref="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)"/>.</remarks>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The last item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, the default value for T is returned.</returns>
            <seealso cref="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.TryFindLast(System.Predicate{`0},`0@)">
            <summary>
            Finds the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. 
            </summary>
            <param name="predicate">A delegate that defines the condition to check for.</param>
            <param name="foundItem">If true is returned, this parameter receives the last item in the list
            that satifies the condition defined by <paramref name="predicate"/>.</param>
            <returns>True if an item that  satisfies the condition <paramref name="predicate"/> was found. False 
            if no item in the list satisfies that condition.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Predicate{`0})">
            <summary>
            Finds the index of the first item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the first item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the first item, in the range of items extending from <paramref name="index"/> to the end, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The starting index of the range to check.</param>
            <returns>The index of the first item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindIndex(System.Int32,System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the first item, in the range of <paramref name="count"/> items starting from <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The starting index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the first item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Predicate{`0})">
            <summary>
            Finds the index of the last item in the list that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <returns>The index of the last item that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the last item, in the range of items extending from the beginning
            of the list to <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The ending index of the range to check.</param>
            <returns>The index of the last item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.FindLastIndex(System.Int32,System.Int32,System.Predicate{`0})">
            <summary>
            Finds the index of the last item, in the range of <paramref name="count"/> items ending at <paramref name="index"/>, that satisfies the condition
            defined by <paramref name="predicate"/>. If no item matches the condition, -1 is returned.
            </summary>
            <param name="predicate">A delegate that defined the condition to check for.</param>
            <param name="index">The ending index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the last item in the given range that satisfies the condition <paramref name="predicate"/>. If no item satisfies that
            condition, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.IndexOf(`0)">
            <summary>
            Finds the index of the first item in the list that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <returns>The index of the first item in the list that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32)">
            <summary>
            Finds the index of the first item, in the range of items extending from <paramref name="index"/> to the end,  
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The starting index of the range to check.</param>
            <returns>The index of the first item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.IndexOf(`0,System.Int32,System.Int32)">
            <summary>
            Finds the index of the first item, in the range of <paramref name="count"/> items starting from <paramref name="index"/>,  
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The starting index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the first item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0)">
            <summary>
            Finds the index of the last item in the list that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <returns>The index of the last item in the list that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32)">
            <summary>
            Finds the index of the last item, in the range of items extending from the beginning
            of the list to <paramref name="index"/>, that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search fror.</param>
            <param name="index">The ending index of the range to check.</param>
            <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.LastIndexOf(`0,System.Int32,System.Int32)">
            <summary>
            Finds the index of the last item, in the range of <paramref name="count"/> items ending at <paramref name="index"/>, 
            that is equal to <paramref name="item"/>. 
            </summary>
            <remarks>The default implementation of equality for type T is used in the search. This is the
            equality defined by IComparable&lt;T&gt; or object.Equals.</remarks>
            <param name="item">The item to search for.</param>
            <param name="index">The ending index of the range to check.</param>
            <param name="count">The number of items in range to check.</param>
            <returns>The index of the last item in the given range that that is equal to <paramref name="item"/>.  If no item is equal
            to <paramref name="item"/>, -1 is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.Range(System.Int32,System.Int32)">
            <summary>
            Returns a view onto a sub-range of this list. Items are not copied; the
            returned IList&lt;T&gt; is simply a different view onto the same underlying items. 
            </summary>
            <remarks>
            <para>This method can be used to apply an algorithm to a portion of a list. For example:</para>
            <code>Algorithms.Reverse(deque.Range(3, 6))</code>
            will return the reverse opf the 6 items beginning at index 3.</remarks>
            <param name="start">The starting index of the view.</param>
            <param name="count">The number of items in the view.</param>
            <returns>A list that is a view onto the given sub-part of this list. </returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> or <paramref name="count"/> is negative.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="start"/> + <paramref name="count"/> is greater than the
            size of the list.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#Insert(System.Int32,`0)">
            <summary>
            Inserts a new item at the given index. This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <param name="index">The index in the list to insert the item at. After the
            insertion, the inserted item is located at this index. The
            first item in the list has index 0.</param>
            <param name="item">The item to insert at the given index.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#Generic#IList{T}#RemoveAt(System.Int32)">
            <summary>
            Removes the item at the given index.  This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Add(System.Object)">
            <summary>
            Adds an item to the end of the list. This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <param name="value">The item to add to the list.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Clear">
            <summary>
            Removes all the items from the list, resulting in an empty list. This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Contains(System.Object)">
            <summary>
            Determines if the list contains any item that compares equal to <paramref name="value"/>.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to search for.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IndexOf(System.Object)">
            <summary>
            Find the first occurrence of an item equal to <paramref name="value"/>
            in the list, and returns the index of that item.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to search for.</param>
            <returns>The index of <paramref name="value"/>, or -1 if no item in the 
            list compares equal to <paramref name="value"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Insert(System.Int32,System.Object)">
            <summary>
            Insert a new item at the given index. This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <param name="index">The index in the list to insert the item at. After the
            insertion, the inserted item is located at this index. The
            first item in the list has index 0.</param>
            <param name="value">The item to insert at the given index.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Remove(System.Object)">
            <summary>
            Searches the list for the first item that compares equal to <paramref name="value"/>.
            If one is found, it is removed. Otherwise, the list is unchanged.  This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <remarks>Equality in the list is determined by the default sense of
            equality for T. If T implements IComparable&lt;T&gt;, the
            Equals method of that interface is used to determine equality. Otherwise, 
            Object.Equals is used to determine equality.</remarks>
            <param name="value">The item to remove from the list.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#RemoveAt(System.Int32)">
            <summary>
            Removes the item at the given index. This implementation throws a NotSupportedException
            indicating that the list is read-only.
            </summary>
            <param name="index">The index in the list to remove the item at. The
            first item in the list has index 0.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.Count">
            <summary>
            The property must be overridden by the derived class to return the number of 
            items in the list.
            </summary>
            <value>The number of items in the list.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.Item(System.Int32)">
            <summary>
            The get part of the indexer must be overridden by the derived class to get 
            values of the list at a particular index.
            </summary>
            <param name="index">The index in the list to get or set an item at. The
            first item in the list has index 0, and the last has index Count-1.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsFixedSize">
            <summary>
            Returns whether the list is a fixed size. This implementation always returns true.
            </summary>
            <value>Alway true, indicating that the list is fixed size.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#IsReadOnly">
            <summary>
            Returns whether the list is read only. This implementation always returns true.
            </summary>
            <value>Alway true, indicating that the list is read-only.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyListBase`1.System#Collections#IList#Item(System.Int32)">
            <summary>
            Gets or sets the value at a particular index in the list.
            </summary>
            <param name="index">The index in the list to get or set an item at. The
            first item in the list has index 0, and the last has index Count-1.</param>
            <value>The item at the given index.</value>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
            <exception cref="T:System.ArgumentException"><paramref name="value"/> cannot be converted to T.</exception>
            <exception cref="T:System.NotSupportedException">Always thrown from the setter, indicating that the list
            is read-only.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.ListView.#ctor(CodeSmith.Engine.PowerCollections.OrderedBag{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Create a new list view wrapped the given set.
            </summary>
            <param name="myBag">The ordered bag to wrap.</param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedBag`1.View">
             <summary>
             The OrderedBag&lt;T&gt;.View class is used to look at a subset of the items
             inside an ordered bag. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. 
             </summary>
            <remarks>
             <p>Views are dynamic. If the underlying bag changes, the view changes in sync. If a change is made
             to the view, the underlying bag changes accordingly.</p>
            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items 
             in a subset of the OrderedBag. For example:</p>
            <code>
             foreach(T item in bag.Range(from, to)) {
                // process item
             }
            </code>
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.#ctor(CodeSmith.Engine.PowerCollections.OrderedBag{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Initialize the view.
            </summary>
            <param name="myBag">OrderedBag being viewed</param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.ItemInView(`0)">
            <summary>
            Determine if the given item lies within the bounds of this view.
            </summary>
            <param name="item">Item to test.</param>
            <returns>True if the item is within the bounds of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.GetEnumerator">
            <summary>
            Enumerate all the items in this view.
            </summary>
            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Clear">
            <summary>
            Removes all the items within this view from the underlying bag.
            </summary>
            <example>The following removes all the items that start with "A" from an OrderedBag.
            <code>
            bag.Range("A", "B").Clear();
            </code>
            </example>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Add(`0)">
            <summary>
            Adds a new item to the bag underlying this View. If the bag already contains an item equal to
            <paramref name="item"/>, that item is replaces with <paramref name="item"/>. If
            <paramref name="item"/> is outside the range of this view, an InvalidOperationException
            is thrown.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>Adding an item takes time O(log N), where N is the number of items in the bag.</para></remarks>
            <param name="item">The item to add.</param>
            <returns>True if the bag already contained an item equal to <paramref name="item"/> (which was replaced), false 
            otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Remove(`0)">
            <summary>
            Searches the underlying bag for an item equal to <paramref name="item"/>, and if found,
            removes it from the bag. If not found, the bag is unchanged. If the item is outside
            the range of this view, the bag is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the bag.</para>
            <para>Removing an item from the bag takes time O(log N), where N is the number of items in the bag.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the bag, or
            was outside the range of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Contains(`0)">
            <summary>
            Determines if this view of the bag contains an item equal to <paramref name="item"/>. The bag
            is not changed. If 
            </summary>
            <remarks>Searching the bag for an item takes time O(log N), where N is the number of items in the bag.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the bag contains <paramref name="item"/>, and <paramref name="item"/> is within
            the range of this view. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.IndexOf(`0)">
            <summary>
            Get the first index of the given item in the view. The smallest item in the view has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the first item in the view equal to <paramref name="item"/>, or -1 if the item is not present
            in the view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.LastIndexOf(`0)">
            <summary>
            Get the last index of the given item in the view. The smallest item in the view has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the last item in the view equal to <paramref name="item"/>, or -1 if the item is not present
            in the view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.AsList">
            <summary>
            Get a read-only list view of the items in this view. The
            items in the list are in sorted order, with the smallest item
            at index 0. This view does not copy any data, and reflects any
            changes to the underlying OrderedSet.
            </summary>
            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Reversed">
            <summary>
            Creates a new View that has the same items as this view, in the reversed order.
            </summary>
            <returns>A new View that has the reversed order of this view, with the same upper 
            and lower bounds.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.GetFirst">
            <summary>
            Returns the first item in this view: the item
            that would appear first if the view was enumerated. 
            </summary>
            <remarks>GetFirst() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The first item in the view. </returns>
            <exception cref="T:System.InvalidOperationException">The view has no items in it.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.GetLast">
            <summary>
            Returns the last item in the view: the item
            that would appear last if the view was enumerated. 
            </summary>
            <remarks>GetLast() takes time O(log N), where N is the number of items in the bag.</remarks>
            <returns>The last item in the view. </returns>
            <exception cref="T:System.InvalidOperationException">The view has no items in it.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Count">
            <summary>
            Number of items in this view.
            </summary>
            <value>Number of items that lie within the bounds the view.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedBag`1.View.Item(System.Int32)">
            <summary>
            Get the item by its index in the sorted order. The smallest item in the view has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>The indexer takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="index">The index to get the item by.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedDictionary`2">
             <summary>
             OrderedDictionary&lt;TKey, TValue&gt; is a collection that maps keys of type TKey
             to values of type TValue. The keys are maintained in a sorted order, and at most one value
             is permitted for each key.
             </summary>
             <remarks>
             <p>The keys are compared in one of three ways. If TKey implements IComparable&lt;TKey&gt; or IComparable,
             then the CompareTo method of that interface will be used to compare elements. Alternatively, a comparison
             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>
             <p>OrderedDictionary is implemented as a balanced binary tree. Inserting, deleting, and looking up an
             an element all are done in log(N) type, where N is the number of keys in the tree.</p>
             <p><see cref="T:System.Collections.Generic.Dictionary`2"/> is similar, but uses hashing instead of comparison, and does not maintain
             the keys in sorted order.</p>
            </remarks>
            <seealso cref="T:System.Collections.Generic.Dictionary`2"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.NewPair(`0,`1)">
            <summary>
            Helper function to create a new KeyValuePair struct.
            </summary>
            <param name="key">The key.</param>
            <param name="value">The value.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.NewPair(`0)">
            <summary>
            Helper function to create a new KeyValuePair struct with a default value.
            </summary>
            <param name="key">The key.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor">
            <summary>
            Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;
            or IComparable. 
            The CompareTo method of this interface will be used to compare keys in this dictionary.
            </summary>
            <exception cref="T:System.InvalidOperationException">TKey does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new OrderedDictionary. The Compare method of the passed comparison object
            will be used to compare keys in this dictionary.
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never
            be called, and need not be implemented.</remarks>
            <param name="comparer">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Comparison{`0})">
            <summary>
            Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.
            </summary>
            <param name="comparison">A delegate to a method that will be used to compare keys.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            <para>Creates a new OrderedDictionary. The TKey must implemented IComparable&lt;TKey&gt;
            or IComparable. 
            The CompareTo method of this interface will be used to compare keys in this dictionary.</para>
            <para>A collection and keys and values (typically another dictionary) is used to initialized the 
            contents of the dictionary.</para>
            </summary>
            <param name="keysAndValues">A collection of keys and values whose contents are used to initialized the dictionary.</param>
            <exception cref="T:System.InvalidOperationException">TKey does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0})">
            <summary>
            <para>Creates a new OrderedDictionary. The Compare method of the passed comparison object
            will be used to compare keys in this dictionary.</para>
            <para>A collection and keys and values (typically another dictionary) is used to initialized the 
            contents of the dictionary.</para>
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;TKey&gt; will never
            be called, and need not be implemented.</remarks>
            <param name="keysAndValues">A collection of keys and values whose contents are used to initialized the dictionary.</param>
            <param name="comparer">An instance of IComparer&lt;TKey&gt; that will be used to compare keys.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Comparison{`0})">
            <summary>
            <para>Creates a new OrderedDictionary. The passed delegate will be used to compare keys in this dictionary.</para>
            <para>A collection and keys and values (typically another dictionary) is used to initialized the 
            contents of the dictionary.</para>
            </summary>
            <param name="keysAndValues">A collection of keys and values whose contents are used to initialized the dictionary.</param>
            <param name="comparison">A delegate to a method that will be used to compare keys.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}},System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Creates a new OrderedDictionary. The passed comparer 
            will be used to compare key-value pairs in this dictionary. Used internally  
            from other constructors.
            </summary>
            <param name="keysAndValues">A collection of keys and values whose contents are used to initialized the dictionary.</param>
            <param name="keyComparer">An IComparer that will be used to compare keys.</param>
            <param name="pairComparer">An IComparer that will be used to compare key-value pairs.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.#ctor(System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},CodeSmith.Engine.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Creates a new OrderedDictionary. The passed comparison delegate 
            will be used to compare keys in this dictionary, and the given tree is used. Used internally for Clone().
            </summary>
            <param name="keyComparer">An IComparer that will be used to compare keys.</param>
            <param name="pairComparer">A delegate to a method that will be used to compare key-value pairs.</param>
            <param name="tree">RedBlackTree that contains the data for the dictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Clone">
            <summary>
            Makes a shallow clone of this dictionary; i.e., if keys or values of the
            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the dictionary takes time O(N), where N is the number of keys in the dictionary.</remarks>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.NonCloneableType(System.Type)">
            <summary>
            Throw an InvalidOperationException indicating that this type is not cloneable.
            </summary>
            <param name="t">Type to test.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.CloneContents">
            <summary>
            Makes a deep clone of this dictionary. A new dictionary is created with a clone of
            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If TKey or TValue is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the dictionary takes time O(N log N), where N is the number of keys in the dictionary.</para></remarks>
            <returns>The cloned dictionary.</returns>
            <exception cref="T:System.InvalidOperationException">TKey or TValue is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Reversed">
             <summary>
             Returns a View collection that can be used for enumerating the keys and values in the collection in 
             reversed order.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {
                // process pair
             }
            </code></p>
             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only keys that are greater than <paramref name="from"/> and 
             less than <paramref name="to"/> are included. The keys are enumerated in sorted order.
             Keys equal to the end points of the range can be included or excluded depending on the
             <paramref name="fromInclusive"/> and <paramref name="toInclusive"/> parameters.
             </summary>
            <remarks>
            <p>If <paramref name="from"/> is greater than or equal to <paramref name="to"/>, the returned collection is empty. </p>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {
                // process pair
             }
            </code>
            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--keys equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not
             be included in the range.</param>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--keys equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.RangeFrom(`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only keys that are greater than (and optionally, equal to) <paramref name="from"/> are included. 
             The keys are enumerated in sorted order. Keys equal to <paramref name="from"/> can be included
             or excluded depending on the <paramref name="fromInclusive"/> parameter.
             </summary>
            <remarks>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {
                // process pair
             }
            </code>
            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--keys equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not
             be included in the range.</param>
             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.RangeTo(`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only items that are less than (and optionally, equal to) <paramref name="to"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="to"/> can be included
             or excluded depending on the <paramref name="toInclusive"/> parameter.
             </summary>
            <remarks>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {
                // process pair
             }
            </code>
            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--keys equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Remove(`0)">
            <summary>
            Removes the key (and associated value) from the collection that is equal to the passed in key. If
            no key in the dictionary is equal to the passed key, false is returned and the 
            dictionary is unchanged.
            </summary>
            <remarks>Equality between keys is determined by the comparison instance or delegate used
            to create the dictionary.</remarks>
            <param name="key">The key to remove.</param>
            <returns>True if the key was found and removed. False if the key was not found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Clear">
            <summary>
            Removes all keys and values from the dictionary.
            </summary>
            <remarks>Clearing the dictionary takes a constant amount of time, regardless of the number of keys in it.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.GetValueElseAdd(`0,`1@)">
            <summary>
            Finds a key in the dictionary. If the dictionary already contains
            a key equal to the passed key, then the existing value is returned via value. If the dictionary
            doesn't contain that key, then value is associated with that key.
            </summary>
            <remarks><para> between keys is determined by the comparison instance or delegate used
            to create the dictionary.</para>
            <para>This method takes time O(log N), where N is the number of keys in the dictionary. If a value is added, It is more efficient than
            calling TryGetValue followed by Add, because the dictionary is not searched twice.</para></remarks>
            <param name="key">The new key. </param>
            <param name="value">The new value to associated with that key, if the key isn't present. If the key was present, 
            returns the exist value associated with that key.</param>
            <returns>True if key was already present, false if key wasn't present (and a new value was added).</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Add(`0,`1)">
            <summary>
            Adds a new key and value to the dictionary. If the dictionary already contains
            a key equal to the passed key, then an ArgumentException is thrown
            </summary>
            <remarks>
            <para>Equality between keys is determined by the comparison instance or delegate used
            to create the dictionary.</para>
            <para>Adding an key and value takes time O(log N), where N is the number of keys in the dictionary.</para></remarks>
            <param name="key">The new key. "null" is a valid key value.</param>
            <param name="value">The new value to associated with that key.</param>
            <exception cref="T:System.ArgumentException">key is already present in the dictionary</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Replace(`0,`1)">
            <summary>
            Changes the value associated with a given key. If the dictionary does not contain
            a key equal to the passed key, then an ArgumentException is thrown.
            </summary>
            <remarks>
            <p>Unlike adding or removing an element, changing the value associated with a key
            can be performed while an enumeration (foreach) on the the dictionary is in progress.</p>
            <p>Equality between keys is determined by the comparison instance or delegate used
            to create the dictionary.</p>
            <p>Replace takes time O(log N), where N is the number of entries in the dictionary.</p></remarks>
            <param name="key">The new key. </param>
            <param name="value">The new value to associated with that key.</param>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">key is not present in the dictionary</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.AddMany(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Adds multiple key-value pairs to a dictionary. If a key exists in both the current instance and dictionaryToAdd,
            then the value is updated with the value from <paramref name="keysAndValues>"/> (no exception is thrown).
            Since IDictionary&lt;TKey,TValue&gt; inherits from IEnumerable&lt;KeyValuePair&lt;TKey,TValue&gt;&gt;, this
            method can be used to merge one dictionary into another.
            </summary>
            <remarks>AddMany takes time O(M log (N+M)), where M is the size of <paramref name="keysAndValues>"/>, and N is the size of
            this dictionary.</remarks>
            <param name="keysAndValues">A collection of keys and values whose contents are added to the current dictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Removes all the keys found in another collection (such as an array or List&lt;TKey&gt;). Each key in keyCollectionToRemove
            is removed from the dictionary. Keys that are not present are ignored.
            </summary>
            <remarks>RemoveMany takes time O(M log N), where M is the size of keyCollectionToRemove, and N is this
            size of this collection.</remarks>
            <returns>The number of keys removed from the dictionary.</returns>
            <param name="keyCollectionToRemove">A collection of keys to remove from the dictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.ContainsKey(`0)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. The dictionary
            is not changed.
            </summary>
            <remarks>Searching the dictionary for a key takes time O(log N), where N is the number of keys in the dictionary.</remarks>
            <param name="key">The key to search for.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.TryGetValue(`0,`1@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, the value
            associated with that key is returned through the value parameter.
            </summary>
            <remarks>TryGetValue takes time O(log N), where N is the number of entries in the dictionary.</remarks>
            <param name="key">The key to search for.</param>
            <param name="value">Returns the value associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is 
            returned as a KeyValuePair&lt;TKey,TValue&gt;.
            The entries are enumerated in the sorted order of the keys.
            </summary>
            <remarks>
            <p>Typically, this method is not called directly. Instead the "foreach" statement is used
            to enumerate the elements of the dictionary, which uses this method implicitly.</p>
            <p>If an element is added to or deleted from the dictionary while it is being enumerated, then 
            the enumeration will end with an InvalidOperationException.</p>
            <p>Enumeration all the entries in the dictionary takes time O(N log N), where N is the number
            of entries in the dictionary.</p>
            </remarks>
            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.System#ICloneable#Clone">
            <summary>
            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.
            </summary>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Comparer">
            <summary>
            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. 
            </summary>
            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was
            created using a comparison delegate, then a comparer equivalent to that delegate
            is returned. Otherwise
            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Item(`0)">
            <summary>
            Gets or sets the value associated with a given key. When getting a value, if this
            key is not found in the collection, then an ArgumentException is thrown. When setting
            a value, the value replaces any existing value in the dictionary.
            </summary>
            <remarks>The indexer takes time O(log N), where N is the number of entries in the dictionary.</remarks>
            <value>The value associated with the key</value>
            <exception cref="T:System.ArgumentException">A value is being retrieved, and the key is not present in the dictionary.</exception>
            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is null.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.Count">
            <summary>
            Returns the number of keys in the dictionary.
            </summary>
            <remarks>The size of the dictionary is returned in constant time..</remarks>
            <value>The number of keys in the dictionary.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View">
             <summary>
             The OrderedDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values
             inside an ordered dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. 
             </summary>
            <remarks>
             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made
             to the view, the underlying dictionary changes accordingly.</p>
            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys
             and values in a subset of the OrderedDictionary. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {
                // process pair
             }
            </code>
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.#ctor(CodeSmith.Engine.PowerCollections.OrderedDictionary{`0,`1},CodeSmith.Engine.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Initialize the View.
            </summary>
            <param name="myDictionary">Associated OrderedDictionary to be viewed.</param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.KeyInView(`0)">
            <summary>
            Determine if the given key lies within the bounds of this view.
            </summary>
            <param name="key">Key to test.</param>
            <returns>True if the key is within the bounds of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.GetEnumerator">
            <summary>
            Enumerate all the keys and values in this view.
            </summary>
            <returns>An IEnumerator of KeyValuePairs with the keys and views in this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.ContainsKey(`0)">
            <summary>
            Tests if the key is present in the part of the dictionary being viewed.
            </summary>
            <param name="key">Key to check for.</param>
            <returns>True if the key is within this view. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.TryGetValue(`0,`1@)">
            <summary>
            Determines if this view contains a key equal to <paramref name="key"/>. If so, the value
            associated with that key is returned through the value parameter. 
            </summary>
            <param name="key">The key to search for.</param>
            <param name="value">Returns the value associated with key, if true was returned.</param>
            <returns>True if the key is within this view. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.Remove(`0)">
            <summary>
            Removes the key (and associated value) from the underlying dictionary of this view. that is equal to the passed in key. If
            no key in the view is equal to the passed key, the dictionary and view are unchanged.
            </summary>
            <param name="key">The key to remove.</param>
            <returns>True if the key was found and removed. False if the key was not found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.Clear">
            <summary>
            Removes all the keys and values within this view from the underlying OrderedDictionary.
            </summary>
            <example>The following removes all the keys that start with "A" from an OrderedDictionary.
            <code>
            dictionary.Range("A", "B").Clear();
            </code>
            </example>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.Reversed">
            <summary>
            Creates a new View that has the same keys and values as this, in the reversed order.
            </summary>
            <returns>A new View that has the reversed order of this view.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.Count">
            <summary>
            Number of keys in this view.
            </summary>
            <value>Number of keys that lie within the bounds the view.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedDictionary`2.View.Item(`0)">
            <summary>
            Gets or sets the value associated with a given key. When getting a value, if this
            key is not found in the collection, then an ArgumentException is thrown. When setting
            a value, the value replaces any existing value in the dictionary. When setting a value, the 
            key must be within the range of keys being viewed.
            </summary>
            <value>The value associated with the key.</value>
            <exception cref="T:System.ArgumentException">A value is being retrieved, and the key is not present in the dictionary, 
            or a value is being set, and the key is outside the range of keys being viewed by this View.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2">
             <summary>
             <para>The OrderedMultiDictionary class that associates values with a key. Unlike an OrderedDictionary,
             each key can have multiple values associated with it. When indexing an OrderedMultidictionary, instead
             of a single value associated with a key, you retrieve an enumeration of values.</para>
             <para>All of the key are stored in sorted order. Also, the values associated with a given key 
             are kept in sorted order as well.</para>
             <para>When constructed, you can chose to allow the same value to be associated with a key multiple
             times, or only one time. </para>
             </summary>
             <typeparam name="TKey">The type of the keys.</typeparam>
             <typeparam name="TValue">The of values associated with the keys.</typeparam>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.MultiDictionary`2"/>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.OrderedDictionary`2"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.NewPair(`0,`1)">
            <summary>
            Helper function to create a new KeyValuePair struct.
            </summary>
            <param name="key">The key.</param>
            <param name="value">The value.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.NewPair(`0)">
            <summary>
            Helper function to create a new KeyValuePair struct with a default value.
            </summary>
            <param name="key">The key.</param>
            <returns>A new KeyValuePair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.KeyRange(`0)">
            <summary>
            Get a RangeTester that maps to the range of all items with the 
            given key.
            </summary>
            <param name="key">Key in the given range.</param>
            <returns>A RangeTester delegate that selects the range of items with that range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.DoubleBoundedKeyRangeTester(`0,System.Boolean,`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by first and last items.
            </summary>
            <param name="first">The lower bound.</param>
            <param name="firstInclusive">True if the lower bound is inclusive, false if exclusive.</param>
            <param name="last">The upper bound.</param>
            <param name="lastInclusive">True if the upper bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for a key in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.LowerBoundedKeyRangeTester(`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by a lower bound.
            </summary>
            <param name="first">The lower bound.</param>
            <param name="inclusive">True if the lower bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for a key in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.UpperBoundedKeyRangeTester(`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by upper bound.
            </summary>
            <param name="last">The upper bound.</param>
            <param name="inclusive">True if the upper bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for a key in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean)">
            <summary>
            Create a new OrderedMultiDictionary. The default ordering of keys and values are used. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <remarks>The default ordering of keys and values will be used, as defined by TKey and TValue's implementation
            of IComparable&lt;T&gt; (or IComparable if IComparable&lt;T&gt; is not implemented). If a different ordering should be
            used, other constructors allow a custom Comparer or IComparer to be passed to changed the ordering.</remarks>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <exception cref="T:System.InvalidOperationException">TKey or TValue does not implement either IComparable&lt;T&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0})">
            <summary>
            Create a new OrderedMultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyComparison">A delegate to a method that will be used to compare keys.</param>
            <exception cref="T:System.InvalidOperationException">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Comparison{`0},System.Comparison{`1})">
            <summary>
            Create a new OrderedMultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyComparison">A delegate to a method that will be used to compare keys.</param>
            <param name="valueComparison">A delegate to a method that will be used to compare values.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0})">
            <summary>
            Create a new OrderedMultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyComparer">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>
            <exception cref="T:System.InvalidOperationException">TValue does not implement either IComparable&lt;TValue&gt; or IComparable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1})">
            <summary>
            Create a new OrderedMultiDictionary. If duplicate values
            are allowed, multiple copies of the same value can be associated with the same key. For example, the key "foo"
            could have "a", "a", and "b" associated with it. If duplicate values are not allowed, only one copies of a given value can
            be associated with the same key, although different keys can have the same value. For example, the key "foo" could
            have "a" and "b" associated with it, which key "bar" has values "b" and "c" associated with it.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyComparer">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>
            <param name="valueComparer">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.#ctor(System.Boolean,System.Int32,System.Collections.Generic.IComparer{`0},System.Collections.Generic.IComparer{`1},System.Collections.Generic.IComparer{System.Collections.Generic.KeyValuePair{`0,`1}},CodeSmith.Engine.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Create a new OrderedMultiDictionary. Used internally for cloning.
            </summary>
            <param name="allowDuplicateValues">Can the same value be associated with a key multiple times?</param>
            <param name="keyCount">Number of keys.</param>
            <param name="keyComparer">An IComparer&lt;TKey&gt; instance that will be used to compare keys.</param>
            <param name="valueComparer">An IComparer&lt;TValue&gt; instance that will be used to compare values.</param>
            <param name="comparer">Comparer of key-value pairs.</param>
            <param name="tree">The red-black tree used to store the data.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Add(`0,`1)">
            <summary>
            <para>Adds a new value to be associated with a key. If duplicate values are permitted, this
            method always adds a new key-value pair to the dictionary.</para>
            <para>If duplicate values are not permitted, and <paramref name="key"/> already has a value
            equal to <paramref name="value"/> associated with it, then that value is replaced with <paramref name="value"/>,
            and the number of values associate with <paramref name="key"/> is unchanged.</para>
            </summary>
            <param name="key">The key to associate with.</param>
            <param name="value">The value to associated with <paramref name="key"/>.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Remove(`0,`1)">
            <summary>
            Removes a given value from the values associated with a key. If the
            last value is removed from a key, the key is removed also.
            </summary>
            <param name="key">A key to remove a value from.</param>
            <param name="value">The value to remove.</param>
            <returns>True if <paramref name="value"/> was associated with <paramref name="key"/> (and was
            therefore removed). False if <paramref name="value"/> was not associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Remove(`0)">
            <summary>
            Removes a key and all associated values from the dictionary. If the
            key is not present in the dictionary, it is unchanged and false is returned.
            </summary>
            <param name="key">The key to remove.</param>
            <returns>True if the key was present and was removed. Returns 
            false if the key was not present.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Clear">
            <summary>
            Removes all keys and values from the dictionary.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.EqualValues(`1,`1)">
            <summary>
            Determine if two values are equal.
            </summary>
            <param name="value1">First value to compare.</param>
            <param name="value2">Second value to compare.</param>
            <returns>True if the values are equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Contains(`0,`1)">
            <summary>
            Checks to see if <paramref name="value"/> is associated with <paramref name="key"/>
            in the dictionary.
            </summary>
            <param name="key">The key to check.</param>
            <param name="value">The value to check.</param>
            <returns>True if <paramref name="value"/> is associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.ContainsKey(`0)">
            <summary>
            Checks to see if the key is present in the dictionary and has
            at least one value associated with it.
            </summary>
            <param name="key">The key to check.</param>
            <returns>True if <paramref name="key"/> is present and has at least
            one value associated with it. Returns false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys(CodeSmith.Engine.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean)">
            <summary>
            A private helper method that returns an enumerable that
            enumerates all the keys in a range.
            </summary>
            <param name="rangeTester">Defines the range to enumerate.</param>
            <param name="reversed">Should the keys be enumerated in reverse order?</param>
            <returns>An IEnumerable&lt;TKey&gt; that enumerates the keys in the given range.
            in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.EnumerateValuesForKey(`0)">
            <summary>
            A private helper method for the indexer to return an enumerable that
            enumerates all the values for a key. This is separate method because indexers
            can't use the yield return construct.
            </summary>
            <param name="key"></param>
            <returns>An IEnumerable&lt;TValue&gt; that can be used to enumerate all the
            values associated with <paramref name="key"/>. If <paramref name="key"/> is not present,
            an enumerable that enumerates no items is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, all the values
            associated with that key are returned through the values parameter. 
            </summary>
            <param name="key">The key to search for.</param>
            <param name="values">Returns all values associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.EnumerateKeys">
            <summary>
            Enumerate all of the keys in the dictionary.
            </summary>
            <returns>An IEnumerator&lt;TKey&gt; of all of the keys in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.CountValues(`0)">
            <summary>
            Gets the number of values associated with a given key.
            </summary>
            <param name="key">The key to count values of.</param>
            <returns>The number of values associated with <paramref name="key"/>. If <paramref name="key"/>
            is not present in the dictionary, zero is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.CountAllValues">
            <summary>
            Gets a total count of values in the collection. 
            </summary>
            <returns>The total number of values associated with all keys in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Clone">
            <summary>
            Makes a shallow clone of this dictionary; i.e., if keys or values of the
            dictionary are reference types, then they are not cloned. If TKey or TValue is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the dictionary takes time O(N), where N is the number of key-value pairs in the dictionary.</remarks>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.System#ICloneable#Clone">
            <summary>
            Implements ICloneable.Clone. Makes a shallow clone of this dictionary; i.e., if keys or values are reference types, then they are not cloned.
            </summary>
            <returns>The cloned dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.NonCloneableType(System.Type)">
            <summary>
            Throw an InvalidOperationException indicating that this type is not cloneable.
            </summary>
            <param name="t">Type to test.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.CloneContents">
            <summary>
            Makes a deep clone of this dictionary. A new dictionary is created with a clone of
            each entry of this dictionary, by calling ICloneable.Clone on each element. If TKey or TValue is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If TKey or TValue is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the dictionary takes time O(N log N), where N is the number of key-value pairs in the dictionary.</para></remarks>
            <returns>The cloned dictionary.</returns>
            <exception cref="T:System.InvalidOperationException">TKey or TValue is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Reversed">
             <summary>
             Returns a View collection that can be used for enumerating the keys and values in the collection in 
             reversed order.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Reversed()) {
                // process pair
             }
            </code></p>
             <p>If an entry is added to or deleted from the dictionary while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Reverse does not copy the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <returns>An OrderedDictionary.View of key-value pairs in reverse order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Range(`0,System.Boolean,`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only keys that are greater than <paramref name="from"/> and 
             less than <paramref name="to"/> are included. The keys are enumerated in sorted order.
             Keys equal to the end points of the range can be included or excluded depending on the
             <paramref name="fromInclusive"/> and <paramref name="toInclusive"/> parameters.
             </summary>
            <remarks>
            <p>If <paramref name="from"/> is greater than or equal to <paramref name="to"/>, the returned collection is empty. </p>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, true, to, false)) {
                // process pair
             }
            </code>
            <p>Calling Range does not copy the data in the dictionary, and the operation takes constant time.</p></remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--keys equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not
             be included in the range.</param>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--keys equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.RangeFrom(`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only keys that are greater than (and optionally, equal to) <paramref name="from"/> are included. 
             The keys are enumerated in sorted order. Keys equal to <paramref name="from"/> can be included
             or excluded depending on the <paramref name="fromInclusive"/> parameter.
             </summary>
            <remarks>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, true)) {
                // process pair
             }
            </code>
            <p>Calling RangeFrom does not copy of the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--keys equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--keys equal to the lower bound will not
             be included in the range.</param>
             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.RangeTo(`0,System.Boolean)">
             <summary>
             Returns a collection that can be used for enumerating some of the keys and values in the collection. 
             Only items that are less than (and optionally, equal to) <paramref name="to"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="to"/> can be included
             or excluded depending on the <paramref name="toInclusive"/> parameter.
             </summary>
            <remarks>
            <p>The sorted order of the keys is determined by the comparison instance or delegate used
             to create the dictionary.</p>
            <p>Typically, this property is used in conjunction with a foreach statement. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.RangeFrom(from, false)) {
                // process pair
             }
            </code>
            <p>Calling RangeTo does not copy the data in the dictionary, and the operation takes constant time.</p>
            </remarks>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--keys equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--keys equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedMultiDictionary.View of key-value pairs in the given range.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.KeyComparer">
            <summary>
            Returns the IComparer&lt;T&gt; used to compare keys in this dictionary. 
            </summary>
            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was
            created using a comparison delegate, then a comparer equivalent to that delegate
            is returned. Otherwise
            the default comparer for TKey (Comparer&lt;TKey&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.ValueComparer">
            <summary>
            Returns the IComparer&lt;T&gt; used to compare values in this dictionary. 
            </summary>
            <value>If the dictionary was created using a comparer, that comparer is returned. If the dictionary was
            created using a comparison delegate, then a comparer equivalent to that delegate
            is returned. Otherwise
            the default comparer for TValue (Comparer&lt;TValue&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.Count">
            <summary>
            Gets the number of key-value pairs in the dictionary. Each value associated
            with a given key is counted. If duplicate values are permitted, each duplicate
            value is included in the count.
            </summary>
            <value>The number of key-value pairs in the dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.KeyValuePairs">
            <summary>
            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple
            values associated with it, then a key-value pair is present for each value associated
            with the key.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.KeyValuePairsCollection">
            <summary>
            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the
            KeyValuePairs collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View">
             <summary>
             The OrderedMultiDictionary&lt;TKey,TValue&gt;.View class is used to look at a subset of the keys and values
             inside an ordered multi-dictionary. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. 
             </summary>
            <remarks>
             <p>Views are dynamic. If the underlying dictionary changes, the view changes in sync. If a change is made
             to the view, the underlying dictionary changes accordingly.</p>
            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the keys
             and values in a subset of the OrderedMultiDictionary. For example:</p>
            <code>
             foreach(KeyValuePair&lt;TKey, TValue&gt; pair in dictionary.Range(from, to)) {
                // process pair
             }
            </code>
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.#ctor(CodeSmith.Engine.PowerCollections.OrderedMultiDictionary{`0,`1},CodeSmith.Engine.PowerCollections.RedBlackTree{System.Collections.Generic.KeyValuePair{`0,`1}}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Initialize the View.
            </summary>
            <param name="myDictionary">Associated OrderedMultiDictionary to be viewed.</param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.KeyInView(`0)">
            <summary>
            Determine if the given key lies within the bounds of this view.
            </summary>
            <param name="key">Key to test.</param>
            <returns>True if the key is within the bounds of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.EnumerateKeys">
            <summary>
            Enumerate all the keys in the dictionary. 
            </summary>
            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that
            have at least one value associated with them.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)">
            <summary>
            Enumerate all of the values associated with a given key. If the key exists and has values associated with it, an enumerator for those
            values is returned throught <paramref name="values"/>. If the key does not exist, false is returned.
            </summary>
            <param name="key">The key to get values for.</param>
            <param name="values">If true is returned, this parameter receives an enumerators that
            enumerates the values associated with that key.</param>
            <returns>True if the key exists and has values associated with it. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.ContainsKey(`0)">
            <summary>
            Tests if the key is present in the part of the dictionary being viewed.
            </summary>
            <param name="key">Key to check</param>
            <returns>True if the key is within this view. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Contains(`0,`1)">
            <summary>
            Tests if the key-value pair is present in the part of the dictionary being viewed.
            </summary>
            <param name="key">Key to check for.</param>
            <param name="value">Value to check for.</param>
            <returns>True if the key-value pair is within this view. </returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.CountValues(`0)">
            <summary>
            Gets the number of values associated with a given key.
            </summary>
            <param name="key">The key to count values of.</param>
            <returns>The number of values associated with <paramref name="key"/>. If <paramref name="key"/>
            is not present in this view, zero is returned.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Add(`0,`1)">
            <summary>
            Adds the given key-value pair to the underlying dictionary of this view.
            If <paramref name="key"/> is not within the range of this view, an
            ArgumentException is thrown.
            </summary>
            <param name="key"></param>
            <param name="value"></param>
            <exception cref="T:System.ArgumentException"><paramref name="key"/> is not 
            within the range of this view.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0)">
            <summary>
            Removes the key (and associated value) from the underlying dictionary of this view. If
            no key in the view is equal to the passed key, the dictionary and view are unchanged.
            </summary>
            <param name="key">The key to remove.</param>
            <returns>True if the key was found and removed. False if the key was not found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Remove(`0,`1)">
            <summary>
            Removes the key and value from the underlying dictionary of this view. that is equal to the passed in key. If
            no key in the view is equal to the passed key, or has the given value associated with it, the dictionary and view are unchanged.
            </summary>
            <param name="key">The key to remove.</param>
            <param name="value">The value to remove.</param>
            <returns>True if the key-value pair was found and removed. False if the key-value pair was not found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Clear">
            <summary>
            Removes all the keys and values within this view from the underlying OrderedMultiDictionary.
            </summary>
            <example>The following removes all the keys that start with "A" from an OrderedMultiDictionary.
            <code>
            dictionary.Range("A", "B").Clear();
            </code>
            </example>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Reversed">
            <summary>
            Creates a new View that has the same keys and values as this, in the reversed order.
            </summary>
            <returns>A new View that has the reversed order of this view.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedMultiDictionary`2.View.Count">
            <summary>
            Number of keys in this view.
            </summary>
            <value>Number of keys that lie within the bounds the view.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedSet`1">
             <summary>
             OrderedSet&lt;T&gt; is a collection that contains items of type T. 
             The item are maintained in a sorted order, and duplicate items are not allowed. Each item has
             an index in the set: the smallest item has index 0, the next smallest item has index 1,
             and so forth.
             </summary>
             <remarks>
             <p>The items are compared in one of three ways. If T implements IComparable&lt;TKey&gt; or IComparable,
             then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison
             function can be passed in either as a delegate, or as an instance of IComparer&lt;TKey&gt;.</p>
             <p>OrderedSet is implemented as a balanced binary tree. Inserting, deleting, and looking up an
             an element all are done in log(N) type, where N is the number of keys in the tree.</p>
             <p><see cref="T:CodeSmith.Engine.PowerCollections.Set`1"/> is similar, but uses hashing instead of comparison, and does not maintain
             the items in sorted order.</p>
            </remarks>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.Set`1"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor">
             <summary>
             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;
             or IComparable. 
             The CompareTo method of this interface will be used to compare items in this set.
             </summary>
            <remarks>
             Items that are null are permitted, and will be sorted before all other items.
            </remarks>
             <exception cref="T:System.InvalidOperationException">T does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Comparison{`0})">
            <summary>
            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.
            </summary>
            <param name="comparison">A delegate to a method that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new OrderedSet. The Compare method of the passed comparison object
            will be used to compare items in this set.
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never
            be called, and need not be implemented.
            </remarks>
            <param name="comparer">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
             <summary>
             Creates a new OrderedSet. The T must implement IComparable&lt;T&gt;
             or IComparable. 
             The CompareTo method of this interface will be used to compare items in this set. The set is
             initialized with all the items in the given collection.
             </summary>
            <remarks>
             Items that are null are permitted, and will be sorted before all other items.
            </remarks>
             <param name="collection">A collection with items to be placed into the OrderedSet.</param>
             <exception cref="T:System.InvalidOperationException">T does not implement IComparable&lt;TKey&gt;.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Comparison{`0})">
            <summary>
            Creates a new OrderedSet. The passed delegate will be used to compare items in this set.
            The set is initialized with all the items in the given collection.
            </summary>
            <param name="collection">A collection with items to be placed into the OrderedSet.</param>
            <param name="comparison">A delegate to a method that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IComparer{`0})">
            <summary>
            Creates a new OrderedSet. The Compare method of the passed comparison object
            will be used to compare items in this set. The set is
            initialized with all the items in the given collection.
            </summary>
            <remarks>
            The GetHashCode and Equals methods of the provided IComparer&lt;T&gt; will never
            be called, and need not be implemented.
            </remarks>
            <param name="collection">A collection with items to be placed into the OrderedSet.</param>
            <param name="comparer">An instance of IComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.#ctor(System.Collections.Generic.IComparer{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0})">
            <summary>
            Creates a new OrderedSet given a comparer and a tree that contains the data. Used
            internally for Clone.
            </summary>
            <param name="comparer">Comparer for the set.</param>
            <param name="tree">Data for the set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.System#ICloneable#Clone">
            <summary>
            Makes a shallow clone of this set; i.e., if items of the
            set are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>
            <returns>The cloned set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Clone">
            <summary>
            Makes a shallow clone of this set; i.e., if items of the
            set are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>
            <returns>The cloned set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.CloneContents">
            <summary>
            Makes a deep clone of this set. A new set is created with a clone of
            each element of this set, by calling ICloneable.Clone on each element. If T is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the set takes time O(N log N), where N is the number of items in the set.</para></remarks>
            <returns>The cloned set.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the items in the set. 
            The items are enumerated in sorted order.
            </summary>
            <remarks>
            <p>Typically, this method is not called directly. Instead the "foreach" statement is used
            to enumerate the items, which uses this method implicitly.</p>
            <p>If an item is added to or deleted from the set while it is being enumerated, then 
            the enumeration will end with an InvalidOperationException.</p>
            <p>Enumeration all the items in the set takes time O(N log N), where N is the number
            of items in the set.</p>
            </remarks>
            <returns>An enumerator for enumerating all the items in the OrderedSet.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Contains(`0)">
            <summary>
            Determines if this set contains an item equal to <paramref name="item"/>. The set
            is not changed.
            </summary>
            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the set contains <paramref name="item"/>. False if the set does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.TryGetItem(`0,`0@)">
            <summary>
            <para>Determines if this set contains an item equal to <paramref name="item"/>, according to the 
            comparison mechanism that was used when the set was created. The set
            is not changed.</para>
            <para>If the set does contain an item equal to <paramref name="item"/>, then the item from the set is returned.</para>
            </summary>
            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>
            <example>
            In the following example, the set contains strings which are compared in a case-insensitive manner. 
            <code>
            OrderedSet&lt;string&gt; set = new OrderedSet&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);
            set.Add("HELLO");
            string s;
            bool b = set.TryGetItem("Hello", out s);   // b receives true, s receives "HELLO".
            </code>
            </example>
            <param name="item">The item to search for.</param>
            <param name="foundItem">Returns the item from the set that was equal to <paramref name="item"/>.</param>
            <returns>True if the set contains <paramref name="item"/>. False if the set does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IndexOf(`0)">
            <summary>
            Get the index of the given item in the sorted order. The smallest item has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the item in the sorted set, or -1 if the item is not present
            in the set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Add(`0)">
            <summary>
            Adds a new item to the set. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaced with <paramref name="item"/>.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to add to the set.</param>
            <returns>True if the set already contained an item equal to <paramref name="item"/> (which was replaced), false 
            otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.System#Collections#Generic#ICollection{T}#Add(`0)">
            <summary>
            Adds a new item to the set. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaces with <paramref name="item"/>.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to add to the set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.AddMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds all the items in <paramref name="collection"/> to the set. If the set already contains an item equal to
            one of the items in <paramref name="collection"/>, that item will be replaced.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding the collection takes time O(M log N), where N is the number of items in the set, and M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to add to the set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Remove(`0)">
            <summary>
            Searches the set for an item equal to <paramref name="item"/>, and if found,
            removes it from the set. If not found, the set is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Removes all the items in <paramref name="collection"/> from the set. Items
            not present in the set are ignored.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Removing the collection takes time O(M log N), where N is the number of items in the set, and M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to remove from the set.</param>
            <returns>The number of items removed from the set.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Clear">
            <summary>
            Removes all items from the set.
            </summary>
            <remarks>Clearing the sets takes a constant amount of time, regardless of the number of items in it.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.CheckEmpty">
            <summary>
            If the collection is empty, throw an invalid operation exception.
            </summary>
            <exception cref="T:System.InvalidOperationException">The set is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.GetFirst">
            <summary>
            Returns the first item in the set: the item
            that would appear first if the set was enumerated. This is also
            the smallest item in the set.
            </summary>
            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The first item in the set. </returns>
            <exception cref="T:System.InvalidOperationException">The set is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.GetLast">
            <summary>
            Returns the lastl item in the set: the item
            that would appear last if the set was enumerated. This is also the
            largest item in the set.
            </summary>
            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The lastl item in the set. </returns>
            <exception cref="T:System.InvalidOperationException">The set is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.RemoveFirst">
            <summary>
            Removes the first item in the set. This is also the smallest item in the set.
            </summary>
            <remarks>RemoveFirst() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The item that was removed, which was the smallest item in the set. </returns>
            <exception cref="T:System.InvalidOperationException">The set is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.RemoveLast">
            <summary>
            Removes the last item in the set. This is also the largest item in the set.
            </summary>
            <remarks>RemoveLast() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The item that was removed, which was the largest item in the set. </returns>
            <exception cref="T:System.InvalidOperationException">The set is empty.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.CheckConsistentComparison(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Check that this set and another set were created with the same comparison
            mechanism. Throws exception if not compatible.
            </summary>
            <param name="otherSet">Other set to check comparision mechanism.</param>
            <exception cref="T:System.InvalidOperationException">If otherSet and this set don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsSupersetOf(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is a superset of another set. Neither set is modified.
            This set is a superset of <paramref name="otherSet"/> if every element in
            <paramref name="otherSet"/> is also in this set.
            <remarks>IsSupersetOf is computed in time O(M log N), where M is the size of the 
            <paramref name="otherSet"/>, and N is the size of the this set.</remarks>
            </summary>
            <param name="otherSet">OrderedSet to compare to.</param>
            <returns>True if this is a superset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsProperSupersetOf(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is a proper superset of another set. Neither set is modified.
            This set is a proper superset of <paramref name="otherSet"/> if every element in
            <paramref name="otherSet"/> is also in this set.
            Additionally, this set must have strictly more items than <paramref name="otherSet"/>.
            </summary>
            <remarks>IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in 
            <paramref name="otherSet"/>.</remarks>
            <param name="otherSet">OrderedSet to compare to.</param>
            <returns>True if this is a proper superset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsSubsetOf(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is a subset of another set. Neither set is modified.
            This set is a subset of <paramref name="otherSet"/> if every element in this set
            is also in <paramref name="otherSet"/>.
            </summary>
            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the 
            <paramref name="otherSet"/>, and N is the size of the this set.</remarks>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a subset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsProperSubsetOf(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is a proper subset of another set. Neither set is modified.
            This set is a subset of <paramref name="otherSet"/> if every element in this set
            is also in <paramref name="otherSet"/>. Additionally, this set must have strictly 
            fewer items than <paramref name="otherSet"/>.
            </summary>
            <remarks>IsSubsetOf is computed in time O(N log M), where M is the size of the 
            <paramref name="otherSet"/>, and N is the size of the this set.</remarks>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a proper subset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsEqualTo(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is equal to another set. This set is equal to
            <paramref name="otherSet"/> if they contain the same items.
            </summary>
            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in 
            this set.</remarks>
            <param name="otherSet">Set to compare to</param>
            <returns>True if this set is equal to <paramref name="otherSet"/>, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.UnionWith(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the union of this set with another set. The union of two sets
            is all items that appear in either or both of the sets. This set receives
            the union of the two sets, the other set is unchanged.
            </summary>
            <remarks>
            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to union with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IsDisjointFrom(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Determines if this set is disjoint from another set. Two sets are disjoint
            if no item from one set is equal to any item in the other set.
            </summary>
            <remarks>
            <para>The answer is computed in time O(N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to check disjointness with.</param>
            <returns>True if the two sets are disjoint, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Union(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the union of this set with another set. The union of two sets
            is all items that appear in either or both of the sets. A new set is 
            created with the union of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The union of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to union with.</param>
            <returns>The union of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.IntersectionWith(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the intersection of this set with another set. The intersection of two sets
            is all items that appear in both of the sets. This set receives
            the intersection of the two sets, the other set is unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to intersection with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Intersection(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the intersection of this set with another set. The intersection of two sets
            is all items that appear in both of the sets. A new set is 
            created with the intersection of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two sets is computed in time O(N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to intersection with.</param>
            <returns>The intersection of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.DifferenceWith(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the difference of this set with another set. The difference of these two sets
            is all items that appear in this set, but not in <paramref name="otherSet"/>. This set receives
            the difference of the two sets; the other set is unchanged.
            </summary>
            <remarks>
            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to difference with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Difference(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the difference of this set with another set. The difference of these two sets
            is all items that appear in this set, but not in <paramref name="otherSet"/>. A new set is 
            created with the difference of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>The difference of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to difference with.</param>
            <returns>The difference of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.SymmetricDifferenceWith(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the symmetric difference of this set with another set. The symmetric difference of two sets
            is all items that appear in either of the sets, but not both. This set receives
            the symmetric difference of the two sets; the other set is unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to symmetric difference with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.SymmetricDifference(CodeSmith.Engine.PowerCollections.OrderedSet{`0})">
            <summary>
            Computes the symmetric difference of this set with another set. The symmetric difference of two sets
            is all items that appear in either of the sets, but not both. A new set is 
            created with the symmetric difference of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two sets is computed in time O(M + N log M), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to symmetric difference with.</param>
            <returns>The symmetric difference of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.AsList">
            <summary>
            Get a read-only list view of the items in this ordered set. The
            items in the list are in sorted order, with the smallest item
            at index 0. This view does not copy any data, and reflects any
            changes to the underlying OrderedSet.
            </summary>
            <returns>A read-only IList&lt;T&gt; view onto this OrderedSet.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Reversed">
             <summary>
             Returns a View collection that can be used for enumerating the items in the set in 
             reversed order.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in set.Reversed()) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the set while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Reverse does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <returns>An OrderedSet.View of items in reverse order.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.Range(`0,System.Boolean,`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the set..
             Only items that are greater than <paramref name="from"/> and 
             less than <paramref name="to"/> are included. The items are enumerated in sorted order.
             Items equal to the end points of the range can be included or excluded depending on the
             <paramref name="fromInclusive"/> and <paramref name="toInclusive"/> parameters.
             </summary>
            <remarks>
            <p>If <paramref name="from"/> is greater than <paramref name="to"/>, the returned collection is empty. </p>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in set.Range(from, true, to, false)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the set while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling Range does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--items equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not
             be included in the range.</param>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--items equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedSet.View of items in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.RangeFrom(`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the set..
             Only items that are greater than (and optionally, equal to) <paramref name="from"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="from"/> can be included
             or excluded depending on the <paramref name="fromInclusive"/> parameter.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in set.RangeFrom(from, true)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the set while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="from">The lower bound of the range.</param>
             <param name="fromInclusive">If true, the lower bound is inclusive--items equal to the lower bound will
             be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not
             be included in the range.</param>
             <returns>An OrderedSet.View of items in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.RangeTo(`0,System.Boolean)">
             <summary>
             Returns a View collection that can be used for enumerating a range of the items in the set..
             Only items that are less than (and optionally, equal to) <paramref name="to"/> are included. 
             The items are enumerated in sorted order. Items equal to <paramref name="to"/> can be included
             or excluded depending on the <paramref name="toInclusive"/> parameter.
             </summary>
            <remarks>
            <p>Typically, this method is used in conjunction with a foreach statement. For example:
            <code>
             foreach(T item in set.RangeTo(to, false)) {
                // process item
             }
            </code></p>
             <p>If an item is added to or deleted from the set while the View is being enumerated, then 
             the enumeration will end with an InvalidOperationException.</p>
            <p>Calling RangeTo does not copy the data in the tree, and the operation takes constant time.</p>
            </remarks>
             <param name="to">The upper bound of the range. </param>
             <param name="toInclusive">If true, the upper bound is inclusive--items equal to the upper bound will
             be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not
             be included in the range.</param>
             <returns>An OrderedSet.View of items in the given range.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedSet`1.Comparer">
            <summary>
            Returns the IComparer&lt;T&gt; used to compare items in this set. 
            </summary>
            <value>If the set was created using a comparer, that comparer is returned. If the set was
            created using a comparison delegate, then a comparer equivalent to that delegate
            is returned. Otherwise
            the default comparer for T (Comparer&lt;T&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedSet`1.Count">
            <summary>
            Returns the number of items in the set.
            </summary>
            <remarks>The size of the set is returned in constant time.</remarks>
            <value>The number of items in the set.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedSet`1.Item(System.Int32)">
            <summary>
            Get the item by its index in the sorted order. The smallest item has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>The indexer takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="index">The index to get the item by.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedSet`1.ListView">
            <summary>
            The nested class that provides a read-only list view
            of all or part of the collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.ListView.#ctor(CodeSmith.Engine.PowerCollections.OrderedSet{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Create a new list view wrapped the given set.
            </summary>
            <param name="mySet"></param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.OrderedSet`1.View">
             <summary>
             The OrderedSet&lt;T&gt;.View class is used to look at a subset of the Items
             inside an ordered set. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. 
             </summary>
            <remarks>
             <p>Views are dynamic. If the underlying set changes, the view changes in sync. If a change is made
             to the view, the underlying set changes accordingly.</p>
            <p>Typically, this class is used in conjunction with a foreach statement to enumerate the items 
             in a subset of the OrderedSet. For example:</p>
            <code>
             foreach(T item in set.Range(from, to)) {
                // process item
             }
            </code>
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.#ctor(CodeSmith.Engine.PowerCollections.OrderedSet{`0},CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,System.Boolean)">
            <summary>
            Initialize the view.
            </summary>
            <param name="mySet">OrderedSet being viewed</param>
            <param name="rangeTester">Range tester that defines the range being used.</param>
            <param name="entireTree">If true, then rangeTester defines the entire tree. Used to optimize some operations.</param>
            <param name="reversed">Is the view enuemerated in reverse order?</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.ItemInView(`0)">
            <summary>
            Determine if the given item lies within the bounds of this view.
            </summary>
            <param name="item">Item to test.</param>
            <returns>True if the item is within the bounds of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.GetEnumerator">
            <summary>
            Enumerate all the items in this view.
            </summary>
            <returns>An IEnumerator&lt;T&gt; with the items in this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Clear">
            <summary>
            Removes all the items within this view from the underlying set.
            </summary>
            <example>The following removes all the items that start with "A" from an OrderedSet.
            <code>
            set.Range("A", "B").Clear();
            </code>
            </example>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Add(`0)">
            <summary>
            Adds a new item to the set underlying this View. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaces with <paramref name="item"/>. If
            <paramref name="item"/> is outside the range of this view, an InvalidOperationException
            is thrown.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to add.</param>
            <returns>True if the set already contained an item equal to <paramref name="item"/> (which was replaced), false 
            otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.System#Collections#Generic#ICollection{T}#Add(`0)">
            <summary>
            Adds a new item to the set underlying this View. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaces with <paramref name="item"/>. If
            <paramref name="item"/> is outside the range of this view, an InvalidOperationException
            is thrown.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to add.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Remove(`0)">
            <summary>
            Searches the underlying set for an item equal to <paramref name="item"/>, and if found,
            removes it from the set. If not found, the set is unchanged. If the item is outside
            the range of this view, the set is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Removing an item from the set takes time O(log N), where N is the number of items in the set.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the set, or
            was outside the range of this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Contains(`0)">
            <summary>
            Determines if this view of the set contains an item equal to <paramref name="item"/>. The set
            is not changed. If 
            </summary>
            <remarks>Searching the set for an item takes time O(log N), where N is the number of items in the set.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the set contains <paramref name="item"/>, and <paramref name="item"/> is within
            the range of this view. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.IndexOf(`0)">
            <summary>
            Get the index of the given item in the view. The smallest item in the view has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>Finding the index takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="item">The item to get the index of.</param>
            <returns>The index of the item in the view, or -1 if the item is not present
            in the view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.AsList">
            <summary>
            Get a read-only list view of the items in this view. The
            items in the list are in sorted order, with the smallest item
            at index 0. This view does not copy any data, and reflects any
            changes to the underlying OrderedSet.
            </summary>
            <returns>A read-only IList&lt;T&gt; view onto this view.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Reversed">
            <summary>
            Creates a new View that has the same items as this view, in the reversed order.
            </summary>
            <returns>A new View that has the reversed order of this view, with the same upper 
            and lower bounds.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.GetFirst">
            <summary>
            Returns the first item in this view: the item
            that would appear first if the view was enumerated. 
            </summary>
            <remarks>GetFirst() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The first item in the view. </returns>
            <exception cref="T:System.InvalidOperationException">The view has no items in it.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.GetLast">
            <summary>
            Returns the last item in the view: the item
            that would appear last if the view was enumerated. 
            </summary>
            <remarks>GetLast() takes time O(log N), where N is the number of items in the set.</remarks>
            <returns>The last item in the view. </returns>
            <exception cref="T:System.InvalidOperationException">The view has no items in it.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Count">
            <summary>
            Number of items in this view.
            </summary>
            <value>Number of items that lie within the bounds the view.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.OrderedSet`1.View.Item(System.Int32)">
            <summary>
            Get the item by its index in the sorted order. The smallest item in the view has index 0,
            the next smallest item has index 1, and the largest item has index Count-1. 
            </summary>
            <remarks>The indexer takes time O(log N), which N is the number of items in 
            the set.</remarks>
            <param name="index">The index to get the item by.</param>
            <returns>The item at the given index.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is
            less than zero or greater than or equal to Count.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Pair`2">
            <summary>
            Stores a pair of objects within a single struct. This struct is useful to use as the
            T of a collection, or as the TKey or TValue of a dictionary.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Pair`2.firstComparer">
            <summary>
            Comparers for the first and second type that are used to compare
            values.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Pair`2.First">
            <summary>
            The first element of the pair.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Pair`2.Second">
            <summary>
            The second element of the pair.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.#ctor(`0,`1)">
            <summary>
            Creates a new pair with given first and second elements.
            </summary>
            <param name="first">The first element of the pair.</param>
            <param name="second">The second element of the pair.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.#ctor(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Creates a new pair using elements from a KeyValuePair structure. The
            First element gets the Key, and the Second elements gets the Value.
            </summary>
            <param name="keyAndValue">The KeyValuePair to initialize the Pair with .</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.Equals(System.Object)">
            <summary>
            Determines if this pair is equal to another object. The pair is equal to another object 
            if that object is a Pair, both element types are the same, and the first and second elements
            both compare equal using object.Equals.
            </summary>
            <param name="obj">Object to compare for equality.</param>
            <returns>True if the objects are equal. False if the objects are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.Equals(CodeSmith.Engine.PowerCollections.Pair{`0,`1})">
            <summary>
            Determines if this pair is equal to another pair. The pair is equal if  the first and second elements
            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="other">Pair to compare with for equality.</param>
            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.GetHashCode">
            <summary>
            Returns a hash code for the pair, suitable for use in a hash-table or other hashed collection.
            Two pairs that compare equal (using Equals) will have the same hash code. The hash code for
            the pair is derived by combining the hash codes for each of the two elements of the pair.
            </summary>
            <returns>The hash code.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.CompareTo(CodeSmith.Engine.PowerCollections.Pair{`0,`1})">
            <summary>
            <para> Compares this pair to another pair of the some type. The pairs are compared by using
            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs
            are compared by their first elements first, if their first elements are equal, then they
            are compared by their second elements.</para>
            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then
            an NotSupportedException is thrown, because the pairs cannot be compared.</para>
            </summary>
            <param name="other">The pair to compare to.</param>
            <returns>An integer indicating how this pair compares to <paramref name="other"/>. Less
            than zero indicates this pair is less than <paramref name="other"/>. Zero indicate this pair is
            equals to <paramref name="other"/>. Greater than zero indicates this pair is greater than
            <paramref name="other"/>.</returns>
            <exception cref="T:System.NotSupportedException">Either FirstSecond or TSecond is not comparable
            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.System#IComparable#CompareTo(System.Object)">
            <summary>
            <para> Compares this pair to another pair of the some type. The pairs are compared by using
            the IComparable&lt;T&gt; or IComparable interface on TFirst and TSecond. The pairs
            are compared by their first elements first, if their first elements are equal, then they
            are compared by their second elements.</para>
            <para>If either TFirst or TSecond does not implement IComparable&lt;T&gt; or IComparable, then
            an NotSupportedException is thrown, because the pairs cannot be compared.</para>
            </summary>
            <param name="obj">The pair to compare to.</param>
            <returns>An integer indicating how this pair compares to <paramref name="obj"/>. Less
            than zero indicates this pair is less than <paramref name="other"/>. Zero indicate this pair is
            equals to <paramref name="obj"/>. Greater than zero indicates this pair is greater than
            <paramref name="obj"/>.</returns>
            <exception cref="T:System.ArgumentException"><paramref name="obj"/> is not of the correct type.</exception>
            <exception cref="T:System.NotSupportedException">Either FirstSecond or TSecond is not comparable
            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.ToString">
            <summary>
            Returns a string representation of the pair. The string representation of the pair is
            of the form:
            <c>First: {0}, Second: {1}</c>
            where {0} is the result of First.ToString(), and {1} is the result of Second.ToString() (or
            "null" if they are null.)
            </summary>
            <returns> The string representation of the pair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.op_Equality(CodeSmith.Engine.PowerCollections.Pair{`0,`1},CodeSmith.Engine.PowerCollections.Pair{`0,`1})">
            <summary>
            Determines if two pairs are equal. Two pairs are equal if  the first and second elements
            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="pair1">First pair to compare.</param>
            <param name="pair2">Second pair to compare.</param>
            <returns>True if the pairs are equal. False if the pairs are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.op_Inequality(CodeSmith.Engine.PowerCollections.Pair{`0,`1},CodeSmith.Engine.PowerCollections.Pair{`0,`1})">
            <summary>
            Determines if two pairs are not equal. Two pairs are equal if  the first and second elements
            both compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="pair1">First pair to compare.</param>
            <param name="pair2">Second pair to compare.</param>
            <returns>True if the pairs are not equal. False if the pairs are equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.op_Explicit(CodeSmith.Engine.PowerCollections.Pair{`0,`1})~System.Collections.Generic.KeyValuePair{`0,`1}">
            <summary>
            Converts a Pair to a KeyValuePair. The Key part of the KeyValuePair gets
            the First element, and the Value part of the KeyValuePair gets the Second 
            elements.
            </summary>
            <param name="pair">Pair to convert.</param>
            <returns>The KeyValuePair created from <paramref name="pair"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.ToKeyValuePair">
            <summary>
            Converts this Pair to a KeyValuePair. The Key part of the KeyValuePair gets
            the First element, and the Value part of the KeyValuePair gets the Second 
            elements.
            </summary>
            <returns>The KeyValuePair created from this Pair.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Pair`2.op_Explicit(System.Collections.Generic.KeyValuePair{`0,`1})~CodeSmith.Engine.PowerCollections.Pair{`0,`1}">
            <summary>
            Converts a KeyValuePair structure into a Pair. The
            First element gets the Key, and the Second element gets the Value.
            </summary>
            <param name="keyAndValue">The KeyValuePair to convert.</param>
            <returns>The Pair created by converted the KeyValuePair into a Pair.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2">
            <summary>
            ReadOnlyDictionaryBase is a base class that can be used to more easily implement the
            generic IDictionary&lt;T&gt; and non-generic IDictionary interfaces.
            </summary>
            <remarks>
            <para>To use ReadOnlyDictionaryBase as a base class, the derived class must override
            Count, TryGetValue, GetEnumerator. </para>
            </remarks>
            <typeparam name="TKey">The key type of the dictionary.</typeparam>
            <typeparam name="TValue">The value type of the dictionary.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.#ctor">
            <summary>
            Creates a new DictionaryBase. This must be called from the constructor of the
            derived class to specify whether the dictionary is read-only and the name of the
            collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@TValue}#Add(`0,`1)">
            <summary>
            Adds a new key-value pair to the dictionary. Always throws an exception
            indicating that this method is not supported in a read-only dictionary.
            </summary>
            <param name="key">Key to add.</param>
            <param name="value">Value to associated with the key.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.Remove(`0)">
            <summary>
            Removes a key from the dictionary. Always throws an exception
            indicating that this method is not supported in a read-only dictionary.
            </summary>
            <param name="key">Key to remove from the dictionary.</param>
            <returns>True if the key was found, false otherwise.</returns>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.ContainsKey(`0)">
            <summary>
            Determines whether a given key is found
            in the dictionary.
            </summary>
            <remarks>The default implementation simply calls TryGetValue and returns
            what it returns.</remarks>
            <param name="key">Key to look for in the dictionary.</param>
            <returns>True if the key is present in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.TryGetValue(`0,`1@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, the value
            associated with that key is returned through the value parameter. This method must be overridden 
            in the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="value">Returns the value associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.ToString">
            <summary>
            Shows the string representation of the dictionary. The string representation contains
            a list of the mappings in the dictionary.
            </summary>
            <returns>The string representation of the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Determines if a dictionary contains a given KeyValuePair. This implementation checks to see if the
            dictionary contains the given key, and if the value associated with the key is equal to (via object.Equals)
            the value.
            </summary>
            <param name="item">A KeyValuePair containing the Key and Value to check for.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Add(System.Object,System.Object)">
            <summary>
            Adds a key-value pair to the collection. Always throws an exception
            indicating that this method is not supported in a read-only dictionary.
            </summary>
            <param name="key">Key to add to the dictionary.</param>
            <param name="value">Value to add to the dictionary.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Clear">
            <summary>
            Clears this dictionary. Always throws an exception
            indicating that this method is not supported in a read-only dictionary.
            </summary>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Contains(System.Object)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. The dictionary
            is not changed. Calls the (overridden) ContainsKey method. If key is not of the correct
            TKey for the dictionary, false is returned.
            </summary>
            <param name="key">The key to search for.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Remove(System.Object)">
            <summary>
            Removes the key (and associated value) from the collection that is equal to the passed in key. Always throws an exception
            indicating that this method is not supported in a read-only dictionary.
            </summary>
            <param name="key">The key to remove.</param>
            <exception cref="T:System.NotSupportedException">Always thrown.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is 
            returned as a DictionaryEntry.
            The entries are enumerated in the same orders as the (overridden) GetEnumerator
            method.
            </summary>
            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the entries in the dictionary. Each entry is 
            returned as a DictionaryEntry.
            The entries are enumerated in the same orders as the (overridden) GetEnumerator
            method.
            </summary>
            <returns>An enumerator for enumerating all the elements in the OrderedDictionary.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.DebuggerDisplayString">
            <summary>
            Display the contents of the dictionary in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.Item(`0)">
            <summary>
            The indexer of the dictionary. The set accessor throws an NotSupportedException
            stating the dictionary is read-only.
            </summary>
            <remarks>The get accessor is implemented by calling TryGetValue.</remarks>
            <param name="key">Key to find in the dictionary.</param>
            <returns>The value associated with the key.</returns>
            <exception cref="T:System.NotSupportedException">Always thrown from the set accessor, indicating
            that the dictionary is read only.</exception>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">Thrown from the get accessor if the key
            was not found.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.Keys">
            <summary>
            Returns a collection of the keys in this dictionary. 
            </summary>
            <value>A read-only collection of the keys in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.Values">
            <summary>
            Returns a collection of the values in this dictionary. The ordering of 
            values in this collection is the same as that in the Keys collection.
            </summary>
            <value>A read-only collection of the values in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsFixedSize">
            <summary>
            Returns whether this dictionary is fixed size. 
            </summary>
            <value>Always returns true.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#IsReadOnly">
            <summary>
            Returns if this dictionary is read-only. 
            </summary>
            <value>Always returns true.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Keys">
            <summary>
            Returns a collection of all the keys in the dictionary. The values in this collection will
            be enumerated in the same order as the (overridden) GetEnumerator method.
            </summary>
            <value>The collection of keys.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Values">
            <summary>
            Returns a collection of all the values in the dictionary. The values in this collection will
            be enumerated in the same order as the (overridden) GetEnumerator method.
            </summary>
            <value>The collection of values.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.System#Collections#IDictionary#Item(System.Object)">
            <summary>
            Gets the value associated with a given key. When getting a value, if this
            key is not found in the collection, then null is returned. If the key is not of the correct type 
            for this dictionary, null is returned.
            </summary>
            <value>The value associated with the key, or null if the key was not present.</value>
            <exception cref="T:System.NotSupportedException">Always thrown from the set accessor, indicating
            that the dictionary is read only.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection">
            <summary>
            A private class that implements ICollection&lt;TKey&gt; and ICollection for the
            Keys collection. The collection is read-only.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.KeysCollection.#ctor(CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase{`0,`1})">
            <summary>
            Constructor.
            </summary>
            <param name="myDictionary">The dictionary this is associated with.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.ValuesCollection">
            <summary>
            A private class that implements ICollection&lt;TKey&gt; and ICollection for the
            Values collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper">
            <summary>
            A class that wraps a IDictionaryEnumerator around an IEnumerator that
            enumerates KeyValuePairs. This is useful in implementing IDictionary, because
            IEnumerator can be implemented with an iterator, but IDictionaryEnumerator cannot.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyDictionaryBase`2.DictionaryEnumeratorWrapper.#ctor(System.Collections.Generic.IEnumerator{System.Collections.Generic.KeyValuePair{`0,`1}})">
            <summary>
            Constructor.
            </summary>
            <param name="enumerator">The enumerator of KeyValuePairs that is being wrapped.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2">
            <summary>
            MultiDictionaryBase is a base class that can be used to more easily implement a class
            that associates multiple values to a single key. The class implements the generic
            IDictionary&lt;TKey, ICollection&lt;TValue&gt;&gt; interface. The resulting collection
            is read-only -- items cannot be added or removed.
            </summary>
            <remarks>
            <para>To use ReadOnlyMultiDictionaryBase as a base class, the derived class must override
            Count, Contains(TKey,TValue), EnumerateKeys, and TryEnumerateValuesForKey . </para>
            </remarks>
            <typeparam name="TKey">The key type of the dictionary.</typeparam>
            <typeparam name="TValue">The value type of the dictionary.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.#ctor">
            <summary>
            Creates a new ReadOnlyMultiDictionaryBase. 
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.MethodModifiesCollection">
            <summary>
            Throws an NotSupportedException stating that this collection cannot be modified.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerateKeys">
            <summary>
            Enumerate all the keys in the dictionary. This method must be overridden by a derived
            class.
            </summary>
            <returns>An IEnumerator&lt;TKey&gt; that enumerates all of the keys in the collection that
            have at least one value associated with them.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.TryEnumerateValuesForKey(`0,System.Collections.Generic.IEnumerator{`1}@)">
            <summary>
            Enumerate all of the values associated with a given key. This method must be overridden
            by the derived class. If the key exists and has values associated with it, an enumerator for those
            values is returned throught <paramref name="values"/>. If the key does not exist, false is returned.
            </summary>
            <param name="key">The key to get values for.</param>
            <param name="values">If true is returned, this parameter receives an enumerators that
            enumerates the values associated with that key.</param>
            <returns>True if the key exists and has values associated with it. False otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Add(`0,System.Collections.Generic.ICollection{`1})">
            <summary>
            Implements IDictionary&lt;TKey, IEnumerable&lt;TValue&gt;&gt;.Add. If the 
            key is already present, and ArgumentException is thrown. Otherwise, a
            new key is added, and new values are associated with that key.
            </summary>
            <param name="key">Key to add.</param>
            <param name="values">Values to associate with that key.</param>
            <exception cref="T:System.ArgumentException">The key is already present in the dictionary.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Remove(`0)">
            <summary>
            Removes a key from the dictionary. This method must be overridden in the derived class.
            </summary>
            <param name="key">Key to remove from the dictionary.</param>
            <returns>True if the key was found, false otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#TryGetValue(`0,System.Collections.Generic.ICollection{`1}@)">
            <summary>
            Determines if this dictionary contains a key equal to <paramref name="key"/>. If so, all the values
            associated with that key are returned through the values parameter. This method must be
            overridden by the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="values">Returns all values associated with key, if true was returned.</param>
            <returns>True if the dictionary contains key. False if the dictionary does not contain key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ContainsKey(`0)">
            <summary>
            Determines whether a given key is found in the dictionary.
            </summary>
            <remarks>The default implementation simply calls TryGetValue.
            It may be appropriate to override this method to 
            provide a more efficient implementation.</remarks>
            <param name="key">Key to look for in the dictionary.</param>
            <returns>True if the key is present in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(`0,`1)">
            <summary>
            Determines if this dictionary contains a key-value pair equal to <paramref name="key"/> and 
            <paramref name="value"/>. The dictionary is not changed. This method must be overridden in the derived class.
            </summary>
            <param name="key">The key to search for.</param>
            <param name="value">The value to search for.</param>
            <returns>True if the dictionary has associated <paramref name="value"/> with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Contains(System.Collections.Generic.KeyValuePair{`0,System.Collections.Generic.ICollection{`1}})">
            <summary>
            Determines if this dictionary contains the given key and all of the values associated with that key..
            </summary>
            <param name="pair">A key and collection of values to search for.</param>
            <returns>True if the dictionary has associated all of the values in <paramref name="pair"/>.Value with <paramref name="pair"/>.Key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.EqualValues(`1,`1)">
            <summary>
            If the derived class does not use the default comparison for values, this
            methods should be overridden to compare two values for equality. This is
            used for the correct implementation of ICollection.Contains on the Values
            and KeyValuePairs collections.
            </summary>
            <param name="value1">First value to compare.</param>
            <param name="value2">Second value to compare.</param>
            <returns>True if the values are equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountValues(`0)">
            <summary>
            Gets a count of the number of values associated with a key. The
            default implementation is slow; it enumerators all of the values
            (using TryEnumerateValuesForKey) to count them. A derived class
            may be able to supply a more efficient implementation.
            </summary>
            <param name="key">The key to count values for.</param>
            <returns>The number of values associated with <paramref name="key"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.CountAllValues">
            <summary>
            Gets a total count of values in the collection. This default implementation
            is slow; it enumerates all of the keys in the dictionary and calls CountValues on each.
            A derived class may be able to supply a more efficient implementation.
            </summary>
            <returns>The total number of values associated with all keys in the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ToString">
            <summary>
            Shows the string representation of the dictionary. The string representation contains
            a list of the mappings in the dictionary.
            </summary>
            <returns>The string representation of the dictionary.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.DebuggerDisplayString">
            <summary>
            Display the contents of the dictionary in the debugger. This is intentionally private, it is called
            only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar
            format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger.
            </summary>
            <returns>The string representation of the items in the collection, similar in format to ToString().</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.GetEnumerator">
            <summary>
            Enumerate all the keys in the dictionary, and for each key, the collection of values for that key.
            </summary>
            <returns>An enumerator to enumerate all the key, ICollection&lt;value&gt; pairs in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Count">
            <summary>
            Gets the number of keys in the dictionary. This property must be overridden
            in the derived class.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Keys">
            <summary>
            Gets a read-only collection all the keys in this dictionary.
            </summary>
            <value>An readonly ICollection&lt;TKey&gt; of all the keys in this dictionary.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Values">
            <summary>
            Gets a read-only collection of all the values in the dictionary. 
            </summary>
            <returns>A read-only ICollection&lt;TValue&gt; of all the values in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Values">
            <summary>
            Gets a read-only collection of all the value collections in the dictionary. 
            </summary>
            <returns>A read-only ICollection&lt;IEnumerable&lt;TValue&gt;&gt; of all the values in the dictionary.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairs">
            <summary>
            Gets a read-only collection of all key-value pairs in the dictionary. If a key has multiple
            values associated with it, then a key-value pair is present for each value associated
            with the key.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.Item(`0)">
            <summary>
            Returns a collection of all of the values in the dictionary associated with <paramref name="key"/>.
            If the key is not present in the dictionary, an ICollection with no
            values is returned. The returned ICollection is read-only.
            </summary>
            <param name="key">The key to get the values associated with.</param>
            <value>An ICollection&lt;TValue&gt; with all the values associated with <paramref name="key"/>.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.System#Collections#Generic#IDictionary{TKey@System#Collections#Generic#ICollection{TValue}}#Item(`0)">
            <summary>
            Gets a collection of all the values in the dictionary associated with <paramref name="key"/>.
            If the key is not present in the dictionary, a KeyNotFound exception is thrown.
            </summary>
            <param name="key">The key to get the values associated with.</param>
            <value>An IEnumerable&lt;TValue&gt; that enumerates all the values associated with <paramref name="key"/>.</value>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">The given key is not present in the dictionary.</exception>
            <exception cref="T:System.NotSupportedException">The set accessor is called.</exception>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection">
            <summary>
            A private class that provides the ICollection&lt;TValue&gt; for a particular key. This is the collection
            that is returned from the indexer. The collections is read-write, live, and can be used to add, remove,
            etc. values from the multi-dictionary.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.#ctor(CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1},`0)">
            <summary>
            Constructor. Initializes this collection.
            </summary>
            <param name="myDictionary">Dictionary we're using.</param>
            <param name="key">The key we're looking at.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.NoValues">
            <summary>
            A simple function that returns an IEnumerator&lt;TValue&gt; that
            doesn't yield any values. A helper.
            </summary>
            <returns>An IEnumerator&lt;TValue&gt; that yields no values.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.GetEnumerator">
            <summary>
            Enumerate all the values associated with key.
            </summary>
            <returns>An IEnumerator&lt;TValue&gt; that enumerates all the values associated with key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Contains(`1)">
            <summary>
            Determines if the given values is associated with key.
            </summary>
            <param name="item">Value to check for.</param>
            <returns>True if value is associated with key, false otherwise.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesForKeyCollection.Count">
            <summary>
            Get the number of values associated with the key.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection">
            <summary>
            A private class that implements ICollection&lt;TKey&gt; and ICollection for the
            Keys collection. The collection is read-only.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeysCollection.#ctor(CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase{`0,`1})">
            <summary>
            Constructor.
            </summary>
            <param name="myDictionary">The dictionary this is associated with.</param>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.ValuesCollection">
            <summary>
            A private class that implements ICollection&lt;TValue&gt; and ICollection for the
            Values collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.EnumerableValuesCollection">
            <summary>
            A private class that implements ICollection&lt;IEnumerable&lt;TValue&gt;&gt; and ICollection for the
            Values collection on IDictionary. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.ReadOnlyMultiDictionaryBase`2.KeyValuePairsCollection">
            <summary>
            A private class that implements ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; and ICollection for the
            KeyValuePairs collection. The collection is read-only.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.DuplicatePolicy">
            <summary>
            Describes what to do if a key is already in the tree when doing an
            insertion.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.RedBlackTree`1">
             <summary>
             The base implementation for various collections classes that use Red-Black trees
             as part of their implementation. This class should not (and can not) be 
             used directly by end users; it's only for internal use by the collections package.
             </summary>
             <remarks>
             The Red-Black tree manages items of type T, and uses a IComparer&lt;T&gt; that
             compares items to sort the tree. Multiple items can compare equal and be stored
             in the tree. Insert, Delete, and Find operations are provided in their full generality;
             all operations allow dealing with either the first or last of items that compare equal. 
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.GetNodeStack">
            <summary>
            Create an array of Nodes big enough for any path from top 
            to bottom. This is cached, and reused from call-to-call, so only one
            can be around at a time per tree.
            </summary>
            <returns>The node stack.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.StopEnumerations">
            <summary>
            Must be called whenever there is a structural change in the tree. Causes
            changeStamp to be changed, which causes any in-progress enumerations
            to throw exceptions.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.CheckEnumerationStamp(System.Int32)">
            <summary>
            Checks the given stamp against the current change stamp. If different, the
            collection has changed during enumeration and an InvalidOperationException
            must be thrown
            </summary>
            <param name="startStamp">changeStamp at the start of the enumeration.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.#ctor(System.Collections.Generic.IComparer{`0})">
            <summary>
            Initialize a red-black tree, using the given interface instance to compare elements. Only
            Compare is used on the IComparer interface.
            </summary>
            <param name="comparer">The IComparer&lt;T&gt; used to sort keys.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Clone">
            <summary>
            Clone the tree, returning a new tree containing the same items. Should
            take O(N) take.
            </summary>
            <returns>Clone version of this tree.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Find(`0,System.Boolean,System.Boolean,`0@)">
            <summary>
            Finds the key in the tree. If multiple items in the tree have
            compare equal to the key, finds the first or last one. Optionally replaces the item
            with the one searched for.
            </summary>
            <param name="key">Key to search for.</param>
            <param name="findFirst">If true, find the first of duplicates, else finds the last of duplicates.</param>
            <param name="replace">If true, replaces the item with key (if function returns true)</param>
            <param name="item">Returns the found item, before replacing (if function returns true).</param>
            <returns>True if the key was found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.FindIndex(`0,System.Boolean)">
            <summary>
            Finds the index of the key in the tree. If multiple items in the tree have
            compare equal to the key, finds the first or last one. 
            </summary>
            <param name="key">Key to search for.</param>
            <param name="findFirst">If true, find the first of duplicates, else finds the last of duplicates.</param>
            <returns>Index of the item found if the key was found, -1 if not found.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.GetItemByIndex(System.Int32)">
            <summary>
            Find the item at a particular index in the tree.
            </summary>
            <param name="index">The zero-based index of the item. Must be &gt;= 0 and &lt; Count.</param>
            <returns>The item at the particular index.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Insert(`0,CodeSmith.Engine.PowerCollections.DuplicatePolicy,`0@)">
            <summary>
            Insert a new node into the tree, maintaining the red-black invariants.
            </summary>
            <remarks>Algorithm from Sedgewick, "Algorithms".</remarks>
            <param name="item">The new item to insert</param>
            <param name="dupPolicy">What to do if equal item is already present.</param>
            <param name="previous">If false, returned, the previous item.</param>
            <returns>false if duplicate exists, otherwise true.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.InsertSplit(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,System.Boolean@)">
            <summary>
            Split a node with two red children (a 4-node in the 2-3-4 tree formalism), as
            part of an insert operation.
            </summary>
            <param name="ggparent">great grand-parent of "node", can be null near root</param>
            <param name="gparent">grand-parent of "node", can be null near root</param>
            <param name="parent">parent of "node", can be null near root</param>
            <param name="node">Node to split, can't be null</param>
            <param name="rotated">Indicates that rotation(s) occurred in the tree.</param>
            <returns>Node to continue searching from.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Rotate(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node)">
            <summary>
            Performs a rotation involving the node, it's child and grandchild. The counts of 
            childs and grand-child are set the correct values from their children; this is important
            if they have been adjusted on the way down the try as part of an insert/delete.
            </summary>
            <param name="node">Top node of the rotation. Can be null if child==root.</param>
            <param name="child">One child of "node". Not null.</param>
            <param name="gchild">One child of "child". Not null.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Delete(`0,System.Boolean,`0@)">
            <summary>
            Deletes a key from the tree. If multiple elements are equal to key, 
            deletes the first or last. If no element is equal to the key, 
            returns false.
            </summary>
            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, 
            rotating and recoloring along the way to always keep the current node red, which 
            ensures that the node we delete is red. The details are quite complex, however! </remarks>
            <param name="key">Key to delete.</param>
            <param name="deleteFirst">Which item to delete if multiple are equal to key. True to delete the first, false to delete last.</param>
            <param name="item">Returns the item that was deleted, if true returned.</param>
            <returns>True if an element was deleted, false if no element had 
            specified key.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.GetEnumerator">
            
            <summary>
            Enumerate all the items in-order
            </summary>
            <returns>An enumerator for all the items, in order.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Enumerate all the items in-order
            </summary>
            <returns>An enumerator for all the items, in order.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.BoundedRangeTester(System.Boolean,`0,System.Boolean,`0)">
            <summary>
            Gets a range tester that defines a range by first and last items.
            </summary>
            <param name="useFirst">If true, bound the range on the bottom by first.</param>
            <param name="first">If useFirst is true, the inclusive lower bound.</param>
            <param name="useLast">If true, bound the range on the top by last.</param>
            <param name="last">If useLast is true, the exclusive upper bound.</param>
            <returns>A RangeTester delegate that tests for an item in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.DoubleBoundedRangeTester(`0,System.Boolean,`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by first and last items.
            </summary>
            <param name="first">The lower bound.</param>
            <param name="firstInclusive">True if the lower bound is inclusive, false if exclusive.</param>
            <param name="last">The upper bound.</param>
            <param name="lastInclusive">True if the upper bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for an item in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.LowerBoundedRangeTester(`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by a lower bound.
            </summary>
            <param name="first">The lower bound.</param>
            <param name="inclusive">True if the lower bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for an item in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.UpperBoundedRangeTester(`0,System.Boolean)">
            <summary>
            Gets a range tester that defines a range by upper bound.
            </summary>
            <param name="last">The upper bound.</param>
            <param name="inclusive">True if the upper bound is inclusive, false if exclusive.</param>
            <returns>A RangeTester delegate that tests for an item in the given range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EqualRangeTester(`0)">
            <summary>
            Gets a range tester that defines a range by all items equal to an item.
            </summary>
            <param name="equalTo">The item that is contained in the range.</param>
            <returns>A RangeTester delegate that tests for an item equal to <paramref name="equalTo"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EntireRangeTester(`0)">
            <summary>
            A range tester that defines a range that is the entire tree.
            </summary>
            <param name="item">Item to test.</param>
            <returns>Always returns 0.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EnumerateRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester)">
            <summary>
            Enumerate the items in a custom range in the tree. The range is determined by 
            a RangeTest delegate.
            </summary>
            <param name="rangeTester">Tests an item against the custom range.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in order.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EnumerateRangeInOrder(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node)">
            <summary>
            Enumerate all the items in a custom range, under and including node, in-order.
            </summary>
            <param name="rangeTester">Tests an item against the custom range.</param>
            <param name="node">Node to begin enumeration. May be null.</param>
            <returns>An enumerable of the items.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EnumerateRangeReversed(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester)">
            <summary>
            Enumerate the items in a custom range in the tree, in reversed order. The range is determined by 
            a RangeTest delegate.
            </summary>
            <param name="rangeTester">Tests an item against the custom range.</param>
            <returns>An IEnumerable&lt;T&gt; that enumerates the custom range in reversed order.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.EnumerateRangeInReversedOrder(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node)">
            <summary>
            Enumerate all the items in a custom range, under and including node, in reversed order.
            </summary>
            <param name="rangeTester">Tests an item against the custom range.</param>
            <param name="node">Node to begin enumeration. May be null.</param>
            <returns>An enumerable of the items, in reversed oreder.</returns>
            <exception cref="T:System.InvalidOperationException">The tree has an item added or deleted during the enumeration.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.DeleteItemFromRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,System.Boolean,`0@)">
            <summary>
            Deletes either the first or last item from a range, as identified by a RangeTester
            delegate. If the range is empty, returns false.
            </summary>
            <remarks>Top-down algorithm from Weiss. Basic plan is to move down in the tree, 
            rotating and recoloring along the way to always keep the current node red, which 
            ensures that the node we delete is red. The details are quite complex, however! </remarks>
            <param name="rangeTester">Range to delete from.</param>
            <param name="deleteFirst">If true, delete the first item from the range, else the last.</param>
            <param name="item">Returns the item that was deleted, if true returned.</param>
            <returns>True if an element was deleted, false if the range is empty.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.DeleteRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester)">
            <summary>
            Delete all the items in a range, identified by a RangeTester delegate.
            </summary>
            <param name="rangeTester">The delegate that defines the range to delete.</param>
            <returns>The number of items deleted.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.CountRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester)">
            <summary>
            Count the items in a custom range in the tree. The range is determined by 
            a RangeTester delegate.
            </summary>
            <param name="rangeTester">The delegate that defines the range.</param>
            <returns>The number of items in the range.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.CountRangeUnderNode(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.Node,System.Boolean,System.Boolean)">
            <summary>
            Count all the items in a custom range, under and including node.
            </summary>
            <param name="rangeTester">The delegate that defines the range.</param>
            <param name="node">Node to begin enumeration. May be null.</param>
            <param name="belowRangeTop">This node and all under it are either in the range or below it.</param>
            <param name="aboveRangeBottom">This node and all under it are either in the range or above it.</param>
            <returns>The number of items in the range, under and include node.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.FirstItemInRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)">
            <summary>
            Find the first item in a custom range in the tree, and it's index. The range is determined
            by a RangeTester delegate.
            </summary>
            <param name="rangeTester">The delegate that defines the range.</param>
            <param name="item">Returns the item found, if true was returned.</param>
            <returns>Index of first item in range if range is non-empty, -1 otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.LastItemInRange(CodeSmith.Engine.PowerCollections.RedBlackTree{`0}.RangeTester,`0@)">
            <summary>
            Find the last item in a custom range in the tree, and it's index. The range is determined
            by a RangeTester delegate.
            </summary>
            <param name="rangeTester">The delegate that defines the range.</param>
            <param name="item">Returns the item found, if true was returned.</param>
            <returns>Index of the item if range is non-empty, -1 otherwise.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.RedBlackTree`1.ElementCount">
            <summary>
            Returns the number of elements in the tree.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node">
            <summary>
            The class that is each node in the red-black tree.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node.IncrementCount">
            <summary>
            Add one to the Count.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node.DecrementCount">
            <summary>
            Subtract one from the Count. The current
            Count must be non-zero.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node.Clone">
            <summary>
            Clones a node and all its descendants.
            </summary>
            <returns>The cloned node.</returns>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node.IsRed">
            <summary>
            Is this a red node?
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.RedBlackTree`1.Node.Count">
            <summary>
            Get or set the Count field -- a 31-bit field
            that holds the number of nodes at or below this
            level.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.RedBlackTree`1.RangeTester">
            <summary>
            A delegate that tests if an item is within a custom range. The range must be a contiguous
            range of items with the ordering of this tree. The range test function must test
            if an item is before, withing, or after the range.
            </summary>
            <param name="item">Item to test against the range.</param>
            <returns>Returns negative if item is before the range, zero if item is withing the range,
            and positive if item is after the range.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Set`1">
             <summary>
             Set&lt;T&gt; is a collection that contains items of type T. 
             The item are maintained in a haphazard, unpredictable order, and duplicate items are not allowed.
             </summary>
             <remarks>
             <p>The items are compared in one of two ways. If T implements IComparable&lt;T&gt; 
             then the Equals method of that interface will be used to compare items, otherwise the Equals
             method from Object will be used. Alternatively, an instance of IComparer&lt;T&gt; can be passed
             to the constructor to use to compare items.</p>
             <p>Set is implemented as a hash table. Inserting, deleting, and looking up an
             an element all are done in approximately constant time, regardless of the number of items in the Set.</p>
             <p><see cref="T:CodeSmith.Engine.PowerCollections.OrderedSet`1"/> is similar, but uses comparison instead of hashing, and does maintains
             the items in sorted order.</p>
            </remarks>
            <seealso cref="T:CodeSmith.Engine.PowerCollections.OrderedSet`1"/>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.#ctor">
             <summary>
             Creates a new Set. The Equals method and GetHashCode method on T
             will be used to compare items for equality.
             </summary>
            <remarks>
             Items that are null are permitted, and will be sorted before all other items.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Creates a new Set. The Equals and GetHashCode method of the passed comparer object
            will be used to compare items in this set.
            </summary>
            <param name="equalityComparer">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
             <summary>
             Creates a new Set. The Equals method and GetHashCode method on T
             will be used to compare items for equality.
             </summary>
            <remarks>
             Items that are null are permitted.
            </remarks>
             <param name="collection">A collection with items to be placed into the Set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEnumerable{`0},System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Creates a new Set. The Equals and GetHashCode method of the passed comparer object
            will be used to compare items in this set. The set is
            initialized with all the items in the given collection.
            </summary>
            <param name="collection">A collection with items to be placed into the Set.</param>
            <param name="equalityComparer">An instance of IEqualityComparer&lt;T&gt; that will be used to compare items.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.#ctor(System.Collections.Generic.IEqualityComparer{`0},CodeSmith.Engine.PowerCollections.Hash{`0})">
            <summary>
            Creates a new Set given a comparer and a tree that contains the data. Used
            internally for Clone.
            </summary>
            <param name="equalityComparer">EqualityComparer for the set.</param>
            <param name="hash">Data for the set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.System#ICloneable#Clone">
            <summary>
            Makes a shallow clone of this set; i.e., if items of the
            set are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>
            <returns>The cloned set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Clone">
            <summary>
            Makes a shallow clone of this set; i.e., if items of the
            set are reference types, then they are not cloned. If T is a value type,
            then each element is copied as if by simple assignment.
            </summary>
            <remarks>Cloning the set takes time O(N), where N is the number of items in the set.</remarks>
            <returns>The cloned set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.CloneContents">
            <summary>
            Makes a deep clone of this set. A new set is created with a clone of
            each element of this set, by calling ICloneable.Clone on each element. If T is
            a value type, then each element is copied as if by simple assignment.
            </summary>
            <remarks><para>If T is a reference type, it must implement
            ICloneable. Otherwise, an InvalidOperationException is thrown.</para>
            <para>Cloning the set takes time O(N), where N is the number of items in the set.</para></remarks>
            <returns>The cloned set.</returns>
            <exception cref="T:System.InvalidOperationException">T is a reference type that does not implement ICloneable.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.GetEnumerator">
            <summary>
            Returns an enumerator that enumerates all the items in the set. 
            The items are enumerated in sorted order.
            </summary>
            <remarks>
            <p>Typically, this method is not called directly. Instead the "foreach" statement is used
            to enumerate the items, which uses this method implicitly.</p>
            <p>If an item is added to or deleted from the set while it is being enumerated, then 
            the enumeration will end with an InvalidOperationException.</p>
            <p>Enumerating all the items in the set takes time O(N), where N is the number
            of items in the set.</p>
            </remarks>
            <returns>An enumerator for enumerating all the items in the Set.</returns>		
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Contains(`0)">
            <summary>
            Determines if this set contains an item equal to <paramref name="item"/>. The set
            is not changed.
            </summary>
            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>
            <param name="item">The item to search for.</param>
            <returns>True if the set contains <paramref name="item"/>. False if the set does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.TryGetItem(`0,`0@)">
            <summary>
            <para>Determines if this set contains an item equal to <paramref name="item"/>, according to the 
            comparison mechanism that was used when the set was created. The set
            is not changed.</para>
            <para>If the set does contain an item equal to <paramref name="item"/>, then the item from the set is returned.</para>
            </summary>
            <remarks>Searching the set for an item takes approximately constant time, regardless of the number of items in the set.</remarks>
            <example>
            In the following example, the set contains strings which are compared in a case-insensitive manner. 
            <code>
            Set&lt;string&gt; set = new Set&lt;string&gt;(StringComparer.CurrentCultureIgnoreCase);
            set.Add("HELLO");
            string s;
            bool b = set.TryGetItem("Hello", out s);   // b receives true, s receives "HELLO".
            </code>
            </example>
            <param name="item">The item to search for.</param>
            <param name="foundItem">Returns the item from the set that was equal to <paramref name="item"/>.</param>
            <returns>True if the set contains <paramref name="item"/>. False if the set does not contain <paramref name="item"/>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Add(`0)">
            <summary>
            Adds a new item to the set. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaced with <paramref name="item"/>.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>
            <param name="item">The item to add to the set.</param>
            <returns>True if the set already contained an item equal to <paramref name="item"/> (which was replaced), false 
            otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.System#Collections#Generic#ICollection{T}#Add(`0)">
            <summary>
            Adds a new item to the set. If the set already contains an item equal to
            <paramref name="item"/>, that item is replaced with <paramref name="item"/>.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding an item takes approximately constant time, regardless of the number of items in the set.</para></remarks>
            <param name="item">The item to add to the set.</param>
            <returns>True if the set already contained an item equal to <paramref name="item"/> (which was replaced), false 
            otherwise.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.AddMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Adds all the items in <paramref name="collection"/> to the set. If the set already contains an item equal to
            one of the items in <paramref name="collection"/>, that item will be replaced.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Adding the collection takes time O(M), where M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to add to the set.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Remove(`0)">
            <summary>
            Searches the set for an item equal to <paramref name="item"/>, and if found,
            removes it from the set. If not found, the set is unchanged.
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Removing an item from the set takes approximately constant time, regardless of the size of the set.</para></remarks>
            <param name="item">The item to remove.</param>
            <returns>True if <paramref name="item"/> was found and removed. False if <paramref name="item"/> was not in the set.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.RemoveMany(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Removes all the items in <paramref name="collection"/> from the set. 
            </summary>
            <remarks>
            <para>Equality between items is determined by the comparison instance or delegate used
            to create the set.</para>
            <para>Removing the collection takes time O(M), where M is the 
            number of items in <paramref name="collection"/>.</para></remarks>
            <param name="collection">A collection of items to remove from the set.</param>
            <returns>The number of items removed from the set.</returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="collection"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Clear">
            <summary>
            Removes all items from the set.
            </summary>
            <remarks>Clearing the set takes a constant amount of time, regardless of the number of items in it.</remarks>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.CheckConsistentComparison(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Check that this set and another set were created with the same comparison
            mechanism. Throws exception if not compatible.
            </summary>
            <param name="otherSet">Other set to check comparision mechanism.</param>
            <exception cref="T:System.InvalidOperationException">If otherSet and this set don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsSupersetOf(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is a superset of another set. Neither set is modified.
            This set is a superset of <paramref name="otherSet"/> if every element in
            <paramref name="otherSet"/> is also in this set.
            <remarks>IsSupersetOf is computed in time O(M), where M is the size of the 
            <paramref name="otherSet"/>.</remarks>
            </summary>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a superset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsProperSupersetOf(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is a proper superset of another set. Neither set is modified.
            This set is a proper superset of <paramref name="otherSet"/> if every element in
            <paramref name="otherSet"/> is also in this set.
            Additionally, this set must have strictly more items than <paramref name="otherSet"/>.
            </summary>
            <remarks>IsProperSubsetOf is computed in time O(M), where M is the size of
            <paramref name="otherSet"/>.</remarks>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a proper superset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsSubsetOf(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is a subset of another set. Neither set is modified.
            This set is a subset of <paramref name="otherSet"/> if every element in this set
            is also in <paramref name="otherSet"/>.
            </summary>
            <remarks>IsSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a subset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsProperSubsetOf(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is a proper subset of another set. Neither set is modified.
            This set is a subset of <paramref name="otherSet"/> if every element in this set
            is also in <paramref name="otherSet"/>. Additionally, this set must have strictly 
            fewer items than <paramref name="otherSet"/>.
            </summary>
            <remarks>IsProperSubsetOf is computed in time O(N), where N is the size of the this set.</remarks>
            <param name="otherSet">Set to compare to.</param>
            <returns>True if this is a proper subset of <paramref name="otherSet"/>.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsEqualTo(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is equal to another set. This set is equal to
            <paramref name="otherSet"/> if they contain the same items.
            </summary>
            <remarks>IsEqualTo is computed in time O(N), where N is the number of items in 
            this set.</remarks>
            <param name="otherSet">Set to compare to</param>
            <returns>True if this set is equal to <paramref name="otherSet"/>, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IsDisjointFrom(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Determines if this set is disjoint from another set. Two sets are disjoint
            if no item from one set is equal to any item in the other set.
            </summary>
            <remarks>
            <para>The answer is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to check disjointness with.</param>
            <returns>True if the two sets are disjoint, false otherwise.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.UnionWith(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the union of this set with another set. The union of two sets
            is all items that appear in either or both of the sets. This set receives
            the union of the two sets, the other set is unchanged.
            </summary>
            <remarks>
            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The union of two sets is computed in time O(M + N), where M is the size of the 
            larger set, and N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to union with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Union(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the union of this set with another set. The union of two sets
            is all items that appear in either or both of the sets. A new set is 
            created with the union of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>If equal items appear in both sets, the union will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The union of two sets is computed in time O(M + N), where M is the size of the 
            one set, and N is the size of the other set.</para>
            </remarks>
            <param name="otherSet">Set to union with.</param>
            <returns>The union of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.IntersectionWith(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the intersection of this set with another set. The intersection of two sets
            is all items that appear in both of the sets. This set receives
            the intersection of the two sets, the other set is unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to intersection with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Intersection(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the intersection of this set with another set. The intersection of two sets
            is all items that appear in both of the sets. A new set is 
            created with the intersection of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>When equal items appear in both sets, the intersection will include an arbitrary choice of one of the
            two equal items.</para>
            <para>The intersection of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to intersection with.</param>
            <returns>The intersection of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.DifferenceWith(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the difference of this set with another set. The difference of these two sets
            is all items that appear in this set, but not in <paramref name="otherSet"/>. This set receives
            the difference of the two sets; the other set is unchanged.
            </summary>
            <remarks>
            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to difference with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.Difference(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the difference of this set with another set. The difference of these two sets
            is all items that appear in this set, but not in <paramref name="otherSet"/>. A new set is 
            created with the difference of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>The difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to difference with.</param>
            <returns>The difference of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.SymmetricDifferenceWith(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the symmetric difference of this set with another set. The symmetric difference of two sets
            is all items that appear in either of the sets, but not both. This set receives
            the symmetric difference of the two sets; the other set is unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to symmetric difference with.</param>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Set`1.SymmetricDifference(CodeSmith.Engine.PowerCollections.Set{`0})">
            <summary>
            Computes the symmetric difference of this set with another set. The symmetric difference of two sets
            is all items that appear in either of the sets, but not both. A new set is 
            created with the symmetric difference of the sets and is returned. This set and the other set 
            are unchanged.
            </summary>
            <remarks>
            <para>The symmetric difference of two sets is computed in time O(N), where N is the size of the smaller set.</para>
            </remarks>
            <param name="otherSet">Set to symmetric difference with.</param>
            <returns>The symmetric difference of the two sets.</returns>
            <exception cref="T:System.InvalidOperationException">This set and <paramref name="otherSet"/> don't use the same method for comparing items.</exception>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Set`1.Comparer">
            <summary>
            Returns the IEqualityComparer&lt;T&gt; used to compare items in this set. 
            </summary>
            <value>If the set was created using a comparer, that comparer is returned. Otherwise
            the default comparer for T (EqualityComparer&lt;T&gt;.Default) is returned.</value>
        </member>
        <member name="P:CodeSmith.Engine.PowerCollections.Set`1.Count">
            <summary>
            Returns the number of items in the set.
            </summary>
            <remarks>The size of the set is returned in constant time.</remarks>
            <value>The number of items in the set.</value>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Strings">
            <summary>
            A holder class for localizable strings that are used. Currently, these are not loaded from resources, but 
            just coded into this class. To make this library localizable, simply change this class to load the
            given strings from resources.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Triple`3">
            <summary>
            Stores a triple of objects within a single struct. This struct is useful to use as the
            T of a collection, or as the TKey or TValue of a dictionary.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Triple`3.firstComparer">
            <summary>
            Comparers for the first and second type that are used to compare
            values.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Triple`3.First">
            <summary>
            The first element of the triple.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Triple`3.Second">
            <summary>
            The second element of the triple.
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.PowerCollections.Triple`3.Third">
            <summary>
            The thrid element of the triple.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.#ctor(`0,`1,`2)">
            <summary>
            Creates a new triple with given elements.
            </summary>
            <param name="first">The first element of the triple.</param>
            <param name="second">The second element of the triple.</param>
            <param name="third">The third element of the triple.</param>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.Equals(System.Object)">
            <summary>
            Determines if this triple is equal to another object. The triple is equal to another object 
            if that object is a Triple, all element types are the same, and the all three elements
            compare equal using object.Equals.
            </summary>
            <param name="obj">Object to compare for equality.</param>
            <returns>True if the objects are equal. False if the objects are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.Equals(CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2})">
            <summary>
            Determines if this triple is equal to another triple. Two triples are equal if the all three elements
            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="other">Triple to compare with for equality.</param>
            <returns>True if the triples are equal. False if the triples are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.GetHashCode">
            <summary>
            Returns a hash code for the triple, suitable for use in a hash-table or other hashed collection.
            Two triples that compare equal (using Equals) will have the same hash code. The hash code for
            the triple is derived by combining the hash codes for each of the two elements of the triple.
            </summary>
            <returns>The hash code.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.CompareTo(CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2})">
            <summary>
            <para> Compares this triple to another triple of the some type. The triples are compared by using
            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples
            are compared by their first elements first, if their first elements are equal, then they
            are compared by their second elements. If their second elements are also equal, then they
            are compared by their third elements.</para>
            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then
            an NotSupportedException is thrown, because the triples cannot be compared.</para>
            </summary>
            <param name="other">The triple to compare to.</param>
            <returns>An integer indicating how this triple compares to <paramref name="other"/>. Less
            than zero indicates this triple is less than <paramref name="other"/>. Zero indicate this triple is
            equals to <paramref name="other"/>. Greater than zero indicates this triple is greater than
            <paramref name="other"/>.</returns>
            <exception cref="T:System.NotSupportedException">Either FirstSecond, TSecond, or TThird is not comparable
            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.System#IComparable#CompareTo(System.Object)">
            <summary>
            <para> Compares this triple to another triple of the some type. The triples are compared by using
            the IComparable&lt;T&gt; or IComparable interface on TFirst, TSecond, and TThird. The triples
            are compared by their first elements first, if their first elements are equal, then they
            are compared by their second elements. If their second elements are also equal, then they
            are compared by their third elements.</para>
            <para>If TFirst, TSecond, or TThird does not implement IComparable&lt;T&gt; or IComparable, then
            an NotSupportedException is thrown, because the triples cannot be compared.</para>
            </summary>
            <param name="obj">The triple to compare to.</param>
            <returns>An integer indicating how this triple compares to <paramref name="obj"/>. Less
            than zero indicates this triple is less than <paramref name="obj"/>. Zero indicate this triple is
            equals to <paramref name="obj"/>. Greater than zero indicates this triple is greater than
            <paramref name="obj"/>.</returns>
            <exception cref="T:System.ArgumentException"><paramref name="obj"/> is not of the correct type.</exception>
            <exception cref="T:System.NotSupportedException">Either FirstSecond, TSecond, or TThird is not comparable
            via the IComparable&lt;T&gt; or IComparable interfaces.</exception>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.ToString">
            <summary>
            Returns a string representation of the triple. The string representation of the triple is
            of the form:
            <c>First: {0}, Second: {1}, Third: {2}</c>
            where {0} is the result of First.ToString(), {1} is the result of Second.ToString(), and
            {2} is the result of Third.ToString() (or "null" if they are null.)
            </summary>
            <returns> The string representation of the triple.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.op_Equality(CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2},CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2})">
            <summary>
            Determines if two triples are equal. Two triples are equal if the all three elements
            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="pair1">First triple to compare.</param>
            <param name="pair2">Second triple to compare.</param>
            <returns>True if the triples are equal. False if the triples are not equal.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Triple`3.op_Inequality(CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2},CodeSmith.Engine.PowerCollections.Triple{`0,`1,`2})">
            <summary>
            Determines if two triples are not equal. Two triples are equal if the all three elements
            compare equal using IComparable&lt;T&gt;.Equals or object.Equals.
            </summary>
            <param name="pair1">First triple to compare.</param>
            <param name="pair2">Second triple to compare.</param>
            <returns>True if the triples are not equal. False if the triples are equal.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Util">
            <summary>
            A holder class for various internal utility functions that need to be shared.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Util.IsCloneableType(System.Type,System.Boolean@)">
            <summary>
            Determine if a type is cloneable: either a value type or implementing
            ICloneable.
            </summary>
            <param name="type">Type to check.</param>
            <param name="isValue">Returns if the type is a value type, and does not implement ICloneable.</param>
            <returns>True if the type is cloneable.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Util.SimpleClassName(System.Type)">
            <summary>
            Returns the simple name of the class, for use in exception messages. 
            </summary>
            <returns>The simple name of this class.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Util.CreateEnumerableWrapper``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Wrap an enumerable so that clients can't get to the underlying
            implementation via a down-case
            </summary>
            <param name="wrapped">Enumerable to wrap.</param>
            <returns>A wrapper around the enumerable.</returns>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Util.GetHashCode``1(``0,System.Collections.Generic.IEqualityComparer{``0})">
            <summary>
            Gets the hash code for an object using a comparer. Correctly handles
            null.
            </summary>
            <param name="item">Item to get hash code for. Can be null.</param>
            <param name="equalityComparer">The comparer to use.</param>
            <returns>The hash code for the item.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PowerCollections.Util.WrapEnumerable`1">
            <summary>
            Wrap an enumerable so that clients can't get to the underlying 
            implementation via a down-cast.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PowerCollections.Util.WrapEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Create the wrapper around an enumerable.
            </summary>
            <param name="wrapped">IEnumerable to wrap.</param>
        </member>
        <member name="T:CodeSmith.Engine.Properties.Resources">
            <summary>
              A strongly-typed resource class, for looking up localized strings, etc.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Properties.Resources.ResourceManager">
            <summary>
              Returns the cached ResourceManager instance used by this class.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Properties.Resources.Culture">
            <summary>
              Overrides the current thread's CurrentUICulture property for all
              resource lookups using this strongly typed resource class.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.Properties.Resources.CreateConfiguration">
             <summary>
               Looks up a localized string similar to CREATE TABLE [NameValue] (
                [Name] varchar(250) PRIMARY KEY NOT NULL COLLATE NOCASE,
                [Value] varchar(250) NOT NULL COLLATE NOCASE
            );
            
            CREATE TABLE [LanguageRegionDefinition] (
                [Index] integer PRIMARY KEY NOT NULL,
                [LanguageKeys] varchar(250) NOT NULL COLLATE NOCASE,
                [RegionStartRegex] varchar(250) COLLATE NOCASE,
                [RegionEndRegex] varchar(250) COLLATE NOCASE
            );
            
            CREATE TABLE [MergeStrategyAlias] (
                [Index] integer PRIMARY KEY NOT NULL,
                [Name] nvarchar(100) NOT NULL [rest of string was truncated]&quot;;.
             </summary>
        </member>
        <member name="T:CodeSmith.Engine.IPropertyRefresher">
            <summary>
            Interface that all property refreshers must implement.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.PropertyRefresherContext">
            <summary>
            Context information passed into the IPropertyRefresher methods.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PropertyRefresherContext.PropertyInfo">
            <summary>
            The property that the context points to.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PropertyRefresherContext.Instance">
            <summary>
            The CodeTemplate instance that the context points to.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PropertyRefresherContext.WorkingDirectory">
            <summary>
            The working directory for resolving and creating relative paths.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.SaveFile(System.String)">
            <summary>
            Saves the project to a file.
            </summary>
            <param name="fileName">Name of the file.</param>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.SaveFile(System.String,System.Boolean)">
            <summary>
            Saves the project to a file.
            </summary>
            <param name="fileName">Name of the file.</param>
            <param name="relativePaths">if set to <c>true</c> make paths relative.</param>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.SaveToString">
            <summary>
            Saves project to string.
            </summary>
            <returns>An XML string of the project.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.SaveToString(System.Boolean)">
            <summary>
            Saves project to string.
            </summary>
            <param name="applyVariables">if set to <c>true</c> apply variables.</param>
            <returns>An XML string of the project.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.MakePathsRelative">
            <summary>
            Makes the paths relative to the directory of <see cref="P:CodeSmith.Engine.Schema.CodeSmithProject.FileName"/>.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.InsertVariables(CodeSmith.Engine.Schema.CodeSmithProject)">
            <summary>
            Inserts variables into the property set where the value matchs.
            </summary>
            <param name="csp">The original project.</param>
            <returns>A new instance of CodeSmithProject.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.ReplaceVariables(CodeSmith.Engine.Schema.CodeSmithProject)">
            <summary>
            Replaces variables in the property set with the variables value.
            </summary>
            <param name="csp">The original project.</param>
            <returns>A new instance of CodeSmithProject.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.ToString">
            <summary>
            Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </summary>
            <returns>
            A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.LoadFile(System.String)">
            <summary>
            Loads the project from a file.
            </summary>
            <param name="fileName">Name of the file.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.LoadFile(System.String,System.Boolean)">
            <summary>
            Loads the project from a file.
            </summary>
            <param name="fileName">Name of the file.</param>
            <param name="replaceVariables">if set to <c>true</c> replace variables.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.LoadFromString(System.String)">
            <summary>
            Loads the project from a string.
            </summary>
            <param name="xmlFragment">The XML fragment.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.LoadFromString(System.String,System.Boolean)">
            <summary>
            Loads from string.
            </summary>
            <param name="xmlFragment">The XML fragment.</param>
            <param name="replaceVariables">if set to <c>true</c> replace variables.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Schema.CodeSmithProject.Clone">
            <summary>
            Creates a new object that is a copy of the current instance.
            </summary>
            <returns>
            A new object that is a copy of this instance.
            </returns>
        </member>
        <member name="P:CodeSmith.Engine.Schema.CodeSmithProject.SingleOutput">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.CodeSmithProject.DefaultTemplate">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.CodeSmithProject.Variables">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.CodeSmithProject.DefaultProperties">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.CodeSmithProject.PropertySets">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.DefaultTemplate.Path">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.Property.ChildNodes">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.Property.Name">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.Property.Value">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.Properties">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.Name">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.Enabled">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.Output">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.Template">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.MergeType">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.PropertySet.MergeInit">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.SingleOutput.Path">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.Variable.Key">
            <remarks/>
        </member>
        <member name="P:CodeSmith.Engine.Schema.Variable.Value">
            <remarks/>
        </member>
        <member name="T:CodeSmith.Engine.IPropertySerializer">
            <summary>
            Interface that all property serializers must implement.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.IPropertySerializer.SaveProperty(CodeSmith.Engine.PropertySerializerContext,System.Object)">
            <summary>
            This method will be used to save the property value when a template is being compiled.
            </summary>
            <param name="context">Context information of the target property.</param>
            <param name="propertyValue">The property to be saved.</param>
            <returns>An object that will be stored in a Hashtable during template compilation.</returns>
        </member>
        <member name="M:CodeSmith.Engine.IPropertySerializer.LoadProperty(CodeSmith.Engine.PropertySerializerContext,System.Object)">
            <summary>
            This method will be used to restore the property value after a template has been compiled.
            </summary>
            <param name="context">Context information of the target property.</param>
            <param name="propertyValue">The property to be loaded.</param>
            <returns>The value to be assigned to the template property after it has been compiled.</returns>
        </member>
        <member name="M:CodeSmith.Engine.IPropertySerializer.WritePropertyXml(CodeSmith.Engine.PropertySerializerContext,System.Xml.XmlWriter,System.Object)">
            <summary>
            This method will be used when serializing the property value to an XML property set.
            </summary>
            <param name="context">Context information of the target property.</param>
            <param name="writer">The XML writer that the property value will be written to.</param>
            <param name="propertyValue">The property to be serialized.</param>
        </member>
        <member name="M:CodeSmith.Engine.IPropertySerializer.ReadPropertyXml(CodeSmith.Engine.PropertySerializerContext,System.Xml.XmlNode)">
            <summary>
            This method will be used when deserializing the property from an XML property set.
            </summary>
            <param name="context">Context information of the target property.</param>
            <param name="propertyValue">The XML node to read the property value from.</param>
            <returns>The value to be assigned to the template property.</returns>
        </member>
        <member name="M:CodeSmith.Engine.IPropertySerializer.ParseDefaultValue(CodeSmith.Engine.PropertySerializerContext,System.String)">
            <summary>
            This method will be used to parse a default value for a property when a template is being instantiated.
            </summary>
            <param name="context">Context information of the target property.</param>
            <param name="defaultValue">The default value.</param>
            <returns>An object that will be assigned to the template property.</returns>
        </member>
        <member name="T:CodeSmith.Engine.PropertySerializerContext">
            <summary>
            Context information passed into the IPropertySerializer methods.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.PropertySerializerContext.#ctor(System.Reflection.PropertyInfo,CodeSmith.Engine.CodeTemplate)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.PropertySerializerContext"/> class.
            </summary>
            <param name="propertyInfo">The property that the context points to.</param>
            <param name="instance">The CodeTemplate instance that the context points to.</param>
        </member>
        <member name="M:CodeSmith.Engine.PropertySerializerContext.#ctor(System.Reflection.PropertyInfo,CodeSmith.Engine.CodeTemplate,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.PropertySerializerContext"/> class.
            </summary>
            <param name="propertyInfo">The property info.</param>
            <param name="instance">The instance.</param>
            <param name="workingDirectory">The working directory.</param>
        </member>
        <member name="P:CodeSmith.Engine.PropertySerializerContext.PropertyInfo">
            <summary>
            The property that the context points to.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PropertySerializerContext.Instance">
            <summary>
            The CodeTemplate instance that the context points to.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.PropertySerializerContext.WorkingDirectory">
            <summary>
            The working directory for resolving and creating relative paths.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.XmlPropertyDirectiveTypeConverter">
            <summary>
            This class can be used to convert to and from an XmlNode for a class that supports XML serialization.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.XmlPropertyFilePicker">
            <summary>
            This type editor can be used on a class that supports XML serialization to allow the user to pick an XML file and have that XML file deserialized into the target class.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.XmlPropertyTypeConverter">
            <summary>
            This class can be used to convert to and from an XmlNode for a class that supports XML serialization.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.AdoHelper`1">
            <summary>
            The AdoHelper class is intended to encapsulate high performance, scalable best practices for
            common data access uses.
            </summary>
            <typeparam name="TFactory">The type of the factory.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetParameter(System.String,System.Object)">
            <summary>
            Get an IDataParameter for use in a SQL command
            </summary>
            <param name="name">The name of the parameter to create</param>
            <param name="value">The value of the specified parameter</param>
            <returns>An IDataParameter object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetParameter(System.String,System.Data.DbType,System.Int32,System.Data.ParameterDirection)">
            <summary>
            Get an IDataParameter for use in a SQL command
            </summary>
            <param name="name">The name of the parameter to create</param>
            <param name="dbType">The System.Data.DbType of the parameter</param>
            <param name="size">The size of the parameter</param>
            <param name="direction">The System.Data.ParameterDirection of the parameter</param>
            <returns>An IDataParameter object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetParameter(System.String,System.Data.DbType,System.Int32,System.String,System.Data.DataRowVersion)">
            <summary>
            Get an IDataParameter for use in a SQL command
            </summary>
            <param name="name">The name of the parameter to create</param>
            <param name="dbType">The System.Data.DbType of the parameter</param>
            <param name="size">The size of the parameter</param>
            <param name="sourceColumn">The source column of the parameter</param>
            <param name="sourceVersion">The System.Data.DataRowVersion of the parameter</param>
            <returns>An IDataParameter object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AttachParameters(System.Data.IDbCommand,System.Data.IDataParameter[])">
            <summary>
            This method is used to attach array of IDataParameters to an IDbCommand.
            
            This method will assign a value of DbNull to any parameter with a direction of
            InputOutput and a value of null.  
            
            This behavior will prevent default values from being used, but
            this will be the less common case than an intended pure output parameter (derived as InputOutput)
            where the user provided no input value.
            </summary>
            <param name="command">The command to which the parameters will be added</param>
            <param name="commandParameters">An array of IDataParameterParameters to be added to command</param>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AssignParameterValues(System.Data.IDataParameterCollection,System.Data.DataRow)">
            <summary>
            This method assigns dataRow column values to an IDataParameterCollection
            </summary>
            <param name="commandParameters">The IDataParameterCollection to be assigned values</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values</param>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the parameter names are invalid.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AssignParameterValues(System.Data.IDataParameter[],System.Data.DataRow)">
            <summary>
            This method assigns dataRow column values to an array of IDataParameters
            </summary>
            <param name="commandParameters">Array of IDataParameters to be assigned values</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values</param>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the parameter names are invalid.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AssignParameterValues(System.Data.IDataParameter[],System.Object[])">
            <summary>
            This method assigns an array of values to an array of IDataParameters
            </summary>
            <param name="commandParameters">Array of IDataParameters to be assigned values</param>
            <param name="parameterValues">Array of objects holding the values to be assigned</param>
            <exception cref="T:System.ArgumentException">Thrown if an incorrect number of parameters are passed.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CleanParameterSyntax(System.Data.IDbCommand)">
            <summary>
            This method cleans up the parameter syntax for the provider
            </summary>
            <param name="command">The IDbCommand containing the parameters to clean up.</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.PrepareCommand(System.Data.IDbCommand,System.Data.IDbConnection,System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[],System.Boolean@)">
            <summary>
            This method opens (if necessary) and assigns a connection, transaction, command type and parameters 
            to the provided command
            </summary>
            <param name="command">The IDbCommand to be prepared</param>
            <param name="connection">A valid IDbConnection, on which to execute this command</param>
            <param name="transaction">A valid IDbTransaction, or 'null'</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be associated with the command or 'null' if no parameters are required</param>
            <param name="mustCloseConnection"><c>true</c> if the connection was opened by the method, otherwose is false.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ClearCommand(System.Data.IDbCommand)">
            <summary>
            This method clears (if necessary) the connection, transaction, command type and parameters 
            from the provided command
            </summary>
            <remarks>
            Not implemented here because the behavior of this method differs on each data provider. 
            </remarks>
            <param name="command">The IDbCommand to be cleared</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbCommand)">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in 
            the connection string. 
            </summary>
            <param name="command">The IDbCommand object to use</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.String,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the database specified in 
            the connection string. 
            </summary>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <returns>A DataSet containing the resultset generated by the command</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.String,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in the connection string 
            using the provided parameters.
            </summary>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new IDbParameter("@prodid", 24));
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDbParamters used to execute the command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.String,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(connString, "GetOrders", 24, 36);
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbConnection,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbConnection. 
            </summary>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameters.
            </summary>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new IDataParameter("@prodid", 24));
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbConnection,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(conn, "GetOrders", 24, 36);
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbTransaction,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbTransaction. 
            </summary>
            <example><code>
             DataSet ds = helper.ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbTransaction
            using the provided parameters.
            </summary>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new IDataParameter("@prodid", 24));
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDataset(System.Data.IDbTransaction,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified 
            IDbTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            DataSet ds = helper.ExecuteDataset(tran, "GetOrders", 24, 36);
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbCommand)">
            <summary>
            Execute an IDbCommand (that returns no resultset) against the database
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.String,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns no resultset and takes no parameters) against the database specified in 
            the connection string
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.String,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns no resultset) against the database specified in the connection string 
            using the provided parameters
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.String,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the database specified in 
            the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            
            </remarks>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored prcedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbConnection,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns no resultset and takes no parameters) against the provided IDbConnection. 
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns no resultset) against the specified IDbConnection 
            using the provided parameters.
            </summary>
            <remarks>
            </remarks>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDbParamters used to execute the command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbConnection,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the specified IDbConnection 
            using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            
            </remarks>
            <param name="connection">A valid IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbTransaction,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns no resultset and takes no parameters) against the provided IDbTransaction. 
            </summary>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns no resultset) against the specified IDbTransaction
            using the provided parameters.
            </summary>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQuery(System.Data.IDbTransaction,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the specified 
            IDbTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbCommand)">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in 
            the connection string. 
            </summary>
            <param name="command">The IDbCommand object to use</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbCommand,CodeSmith.Engine.AdoHelper{`0}.AdoConnectionOwnership)">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in 
            the connection string. 
            </summary>
            <param name="command">The IDbCommand object to use</param>
            <param name="connectionOwnership">Enum indicating whether the connection was created internally or externally.</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbConnection,System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[],CodeSmith.Engine.AdoHelper{`0}.AdoConnectionOwnership)">
            <summary>
            Create and prepare an IDbCommand, and call ExecuteReader with the appropriate CommandBehavior.
            </summary>
            <remarks>
            If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
            
            If the caller provided the connection, we want to leave it to them to manage.
            </remarks>
            <param name="connection">A valid IDbConnection, on which to execute this command</param>
            <param name="transaction">A valid IDbTransaction, or 'null'</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be associated with the command or 'null' if no parameters are required</param>
            <param name="connectionOwnership">Indicates whether the connection parameter was provided by the caller, or created by AdoHelper</param>
            <returns>IDataReader containing the results of the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.String,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the database specified in 
            the connection string. 
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.String,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in the connection string 
            using the provided parameters.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.String,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(connString, "GetOrders", 24, 36);
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>an IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbConnection,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbConnection. 
            </summary>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>an IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameters.
            </summary>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new IDataParameter("@prodid", 24));
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>an IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbConnection,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(conn, "GetOrders", 24, 36);
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>an IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbTransaction,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbTransaction. 
            </summary>
            <example><code>
             IDataReader dr = helper.ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbTransaction
            using the provided parameters.
            </summary>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new IDataParameter("@prodid", 24));
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReader(System.Data.IDbTransaction,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified
            IDbTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            IDataReader dr = helper.ExecuteReader(tran, "GetOrders", 24, 36);
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>an IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbCommand)">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset) against the database specified in 
            the connection string. 
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.String,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in 
            the connection string. 
            </summary>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.String,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset) against the database specified in the connection string 
            using the provided parameters.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.String,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the database specified in 
            the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(connString, "GetOrderCount", 24, 36);
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbConnection,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset and takes no parameters) against the provided IDbConnection. 
            </summary>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset) against the specified IDbConnection 
            using the provided parameters.
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbConnection,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the specified IDbConnection 
            using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(conn, "GetOrderCount", 24, 36);
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbTransaction,System.Data.CommandType,System.String)">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset and takes no parameters) against the provided IDbTransaction. 
            </summary>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(tran, CommandType.StoredProcedure, "GetOrderCount");
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a 1x1 resultset) against the specified IDbTransaction
            using the provided parameters.
            </summary>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDbParamters used to execute the command</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalar(System.Data.IDbTransaction,System.String,System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the specified
            IDbTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            int orderCount = (int)helper.ExecuteScalar(tran, "GetOrderCount", 24, 36);
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the transaction is rolled back or commmitted</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbCommand,System.Data.DataSet,System.String[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in 
            the connection string. 
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)</param>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.String,System.Data.CommandType,System.String,System.Data.DataSet,System.String[])">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the database specified in 
            the connection string. 
            </summary>
            <example>
            <code>
            helper.FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)</param>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.String,System.Data.CommandType,System.String,System.Data.DataSet,System.String[],System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the database specified in the connection string 
            using the provided parameters.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.String,System.String,System.Data.DataSet,System.String[],System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            helper.FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, 24);
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataSet">A dataset wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>    
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.DataSet,System.String[])">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbConnection. 
            </summary>
            <example>
            <code>
            helper.FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A dataset wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>    
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbConnection,System.Data.CommandType,System.String,System.Data.DataSet,System.String[],System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameters.
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbConnection,System.String,System.Data.DataSet,System.String[],System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            helper.FillDataset(conn, "GetOrders", ds, new string[] {"orders"}, 24, 36);
            </code></example>
            <param name="connection">A valid IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataSet">A dataset wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.DataSet,System.String[])">
            <summary>
            Execute an IDbCommand (that returns a resultset and takes no parameters) against the provided IDbTransaction. 
            </summary>
            <example>
            <code>
            helper.FillDataset(tran, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A dataset wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>    
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.DataSet,System.String[],System.Data.IDataParameter[])">
            <summary>
            Execute an IDbCommand (that returns a resultset) against the specified IDbTransaction
            using the provided parameters.
            </summary>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbTransaction,System.String,System.Data.DataSet,System.String[],System.Object[])">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified 
            IDbTransaction using the provided parameter values.  This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <remarks>
            This method provides no access to output parameters or the stored procedure's return value parameter.
            </remarks>
            <example>
            <code>
            helper.FillDataset(tran, "GetOrders", ds, new string[] {"orders"}, 24, 36);
            </code></example>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataSet">A dataset wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.FillDataset(System.Data.IDbConnection,System.Data.IDbTransaction,System.Data.CommandType,System.String,System.Data.DataSet,System.String[],System.Data.IDataParameter[])">
            <summary>
            Private helper method that execute an IDbCommand (that returns a resultset) against the specified IDbTransaction and IDbConnection
            using the provided parameters.
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="transaction">A valid IDbTransaction</param>
            <param name="commandType">The CommandType (stored procedure, text, etc.)</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="dataSet">A DataSet wich will contain the resultset generated by the command</param>
            <param name="tableNames">This array will be used to create table mappings allowing the DataTables to be referenced
            by a user defined name (probably the actual table name)
            </param>
            <param name="commandParameters">An array of IDataParameters used to execute the command</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.RowUpdating(System.Object,System.Data.Common.RowUpdatingEventArgs)">
            <summary>
            This method consumes the RowUpdatingEvent and passes it on to the consumer specifed in the call to UpdateDataset
            </summary>
            <param name="obj">The object that generated the event</param>
            <param name="e">The System.Data.Common.RowUpdatingEventArgs</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.RowUpdated(System.Object,System.Data.Common.RowUpdatedEventArgs)">
            <summary>
            This method consumes the RowUpdatedEvent and passes it on to the consumer specifed in the call to UpdateDataset
            </summary>
            <param name="obj">The object that generated the event</param>
            <param name="e">The System.Data.Common.RowUpdatingEventArgs</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.SetCommand(System.Data.IDbCommand,System.Boolean@)">
            <summary>
            Set up a command for updating a DataSet.
            </summary>
            <param name="command">command object to prepare</param>
            <param name="mustCloseConnection">output parameter specifying whether the connection used should be closed by the DAAB</param>
            <returns>An IDbCommand object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.UpdateDataset(System.Data.IDbCommand,System.Data.IDbCommand,System.Data.IDbCommand,System.Data.DataSet,System.String)">
            <summary>
            Executes the respective command for each inserted, updated, or deleted row in the DataSet.
            </summary>
            <example>
            <code>
            helper.UpdateDataset(conn, insertCommand, deleteCommand, updateCommand, dataSet, "Order");
            </code></example>
            <param name="insertCommand">A valid SQL statement or stored procedure to insert new records into the data source</param>
            <param name="deleteCommand">A valid SQL statement or stored procedure to delete records from the data source</param>
            <param name="updateCommand">A valid SQL statement or stored procedure used to update records in the data source</param>
            <param name="dataSet">The DataSet used to update the data source</param>
            <param name="tableName">The DataTable used to update the data source.</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.UpdateDataset(System.Data.IDbCommand,System.Data.IDbCommand,System.Data.IDbCommand,System.Data.DataSet,System.String,CodeSmith.Engine.AdoHelper{`0}.RowUpdatingHandler,CodeSmith.Engine.AdoHelper{`0}.RowUpdatedHandler)">
            <summary> 
            Executes the IDbCommand for each inserted, updated, or deleted row in the DataSet also implementing RowUpdating and RowUpdated Event Handlers 
            </summary> 
            <example> 
            <code>
            RowUpdatingEventHandler rowUpdatingHandler = new RowUpdatingEventHandler( OnRowUpdating ); 
            RowUpdatedEventHandler rowUpdatedHandler = new RowUpdatedEventHandler( OnRowUpdated ); 
            helper.UpdateDataSet(sqlInsertCommand, sqlDeleteCommand, sqlUpdateCommand, dataSet, "Order", rowUpdatingHandler, rowUpdatedHandler); 
            </code></example> 
            <param name="insertCommand">A valid SQL statement or stored procedure to insert new records into the data source</param> 
            <param name="deleteCommand">A valid SQL statement or stored procedure to delete records from the data source</param> 
            <param name="updateCommand">A valid SQL statement or stored procedure used to update records in the data source</param> 
            <param name="dataSet">The DataSet used to update the data source</param> 
            <param name="tableName">The DataTable used to update the data source.</param> 
            <param name="rowUpdatingHandler">RowUpdatingEventHandler</param> 
            <param name="rowUpdatedHandler">RowUpdatedEventHandler</param> 
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CreateCommand(System.String,System.String,System.String[])">
            <summary>
            Simplify the creation of an IDbCommand object by allowing
            a stored procedure and optional parameters to be provided
            </summary>
            <example>
            <code>
            IDbCommand command = helper.CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");
            </code></example>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="sourceColumns">An array of string to be assigned as the source columns of the stored procedure parameters</param>
            <returns>A valid IDbCommand object</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if any of the IDataParameters.ParameterNames are null, or if the parameter count does not match the number of values supplied</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentException">Thrown if the parameter count does not match the number of values supplied</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CreateCommand(System.Data.IDbConnection,System.String,System.String[])">
            <summary>
            Simplify the creation of an IDbCommand object by allowing
            a stored procedure and optional parameters to be provided
            </summary>
            <example>
            <code>
            IDbCommand command = helper.CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");
            </code></example>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="sourceColumns">An array of string to be assigned as the source columns of the stored procedure parameters</param>
            <returns>A valid IDbCommand object</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CreateCommand(System.String,System.String,System.Data.CommandType,System.Data.IDataParameter[])">
            <summary>
            Simplify the creation of an IDbCommand object by allowing
            a stored procedure and optional parameters to be provided
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandText">A valid SQL statement</param>
            <param name="commandType">A System.Data.CommandType</param>
            <param name="commandParameters">The parameters for the SQL statement</param>
            <returns>A valid IDbCommand object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CreateCommand(System.Data.IDbConnection,System.String,System.Data.CommandType,System.Data.IDataParameter[])">
            <summary>
            Simplify the creation of an IDbCommand object by allowing
            a stored procedure and optional parameters to be provided
            </summary>
            <example><code>
            IDbCommand command = helper.CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");
            </code></example>
            <param name="connection">A valid IDbConnection object</param>
            <param name="commandText">A valid SQL statement</param>
            <param name="commandType">A System.Data.CommandType</param>
            <param name="commandParameters">The parameters for the SQL statement</param>
            <returns>A valid IDbCommand object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQueryTypedParams(System.Data.IDbCommand,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) 
            against the database specified in the connection string using the 
            dataRow column values as the stored procedure's parameters values.
            This method will assign the parameter values based on row values.
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQueryTypedParams(System.String,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQueryTypedParams(System.Data.IDbConnection,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the specified IDbConnection 
            using the dataRow column values as the stored procedure's parameters values.  
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteNonQueryTypedParams(System.Data.IDbTransaction,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns no resultset) against the specified
            IDbTransaction using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="transaction">A valid IDbTransaction object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An int representing the number of rows affected by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDatasetTypedParams(System.Data.IDbCommand,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will assign the paraemter values based on row values.
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDatasetTypedParams(System.String,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDatasetTypedParams(System.Data.IDbConnection,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the dataRow column values as the store procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteDatasetTypedParams(System.Data.IDbTransaction,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbTransaction 
            using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on row values.
            </summary>
            <param name="transaction">A valid IDbTransaction object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A DataSet containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReaderTypedParams(System.Data.IDbCommand,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will assign the parameter values based on parameter order.
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReaderTypedParams(System.String,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReaderTypedParams(System.Data.IDbConnection,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbConnection 
            using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteReaderTypedParams(System.Data.IDbTransaction,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a resultset) against the specified IDbTransaction 
            using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="transaction">A valid IDbTransaction object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>A IDataReader containing the resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalarTypedParams(System.Data.IDbCommand,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will assign the parameter values based on parameter order.
            </summary>
            <param name="command">The IDbCommand to execute</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if command is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalarTypedParams(System.String,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the database specified in 
            the connection string using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalarTypedParams(System.Data.IDbConnection,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the specified IDbConnection 
            using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ExecuteScalarTypedParams(System.Data.IDbTransaction,System.String,System.Data.DataRow)">
            <summary>
            Execute a stored procedure via an IDbCommand (that returns a 1x1 resultset) against the specified IDbTransaction
            using the dataRow column values as the stored procedure's parameters values.
            This method will query the database to discover the parameters for the 
            stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
            </summary>
            <param name="transaction">A valid IDbTransaction object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="dataRow">The dataRow used to hold the stored procedure's parameter values.</param>
            <returns>An object containing the value in the 1x1 resultset generated by the command</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if transaction.Connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CheckForReturnValueParameter(System.Object[])">
            <summary>
            Checks for the existence of a return value parameter in the parametervalues
            </summary>
            <param name="parameterValues">An array of objects to be assigned as the input values of the stored procedure</param>
            <returns>true if the parameterValues contains a return value parameter, false otherwise</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AreParameterValuesIDataParameters(System.Object[],System.Data.IDataParameter[])">
            <summary>
            Check to see if the parameter values passed to the helper are, in fact, IDataParameters.
            </summary>
            <param name="parameterValues">Array of parameter values passed to helper</param>
            <param name="iDataParameterValues">new array of IDataParameters built from parameter values</param>
            <returns>True if the parameter values are IDataParameters</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetSpParameterSet(System.String,System.String)">
            <summary>
            Retrieves the set of IDataParameters appropriate for the stored procedure
            </summary>
            <remarks>
            This method will query the database for this information, and then store it in a cache for future requests.
            </remarks>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <returns>An array of IDataParameterParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetSpParameterSet(System.String,System.String,System.Boolean)">
            <summary>
            Retrieves the set of IDataParameters appropriate for the stored procedure
            </summary>
            <remarks>
            This method will query the database for this information, and then store it in a cache for future requests.
            </remarks>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="includeReturnValueParameter">A bool value indicating whether the return value parameter should be included in the results</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetSpParameterSet(System.Data.IDbConnection,System.String)">
            <summary>
            Retrieves the set of IDataParameters appropriate for the stored procedure
            </summary>
            <remarks>
            This method will query the database for this information, and then store it in a cache for future requests.
            </remarks>
            <param name="connection">A valid IDataConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetSpParameterSet(System.Data.IDbConnection,System.String,System.Boolean)">
            <summary>
            Retrieves the set of IDataParameters appropriate for the stored procedure
            </summary>
            <remarks>
            This method will query the database for this information, and then store it in a cache for future requests.
            </remarks>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="includeReturnValueParameter">A bool value indicating whether the return value parameter should be included in the results</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetSpParameterSetInternal(System.Data.IDbConnection,System.String,System.Boolean)">
            <summary>
            Retrieves the set of IDataParameters appropriate for the stored procedure
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="includeReturnValueParameter">A bool value indicating whether the return value parameter should be included in the results</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetCachedParameterSet(System.String,System.String)">
            <summary>
            Retrieve a parameter array from the cache
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetCachedParameterSet(System.Data.IDbConnection,System.String)">
            <summary>
            Retrieve a parameter array from the cache
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetCachedParameterSetInternal(System.Data.IDbConnection,System.String)">
            <summary>
            Retrieve a parameter array from the cache
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An array of IDataParameters</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CacheParameterSet(System.String,System.String,System.Data.IDataParameter[])">
            <summary>
            Add parameter array to the cache
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be cached</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CacheParameterSet(System.Data.IDbConnection,System.String,System.Data.IDataParameter[])">
            <summary>
            Add parameter array to the cache
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be cached</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.CacheParameterSetInternal(System.Data.IDbConnection,System.String,System.Data.IDataParameter[])">
            <summary>
            Add parameter array to the cache
            </summary>
            <param name="connection">A valid IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be cached</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.DiscoverSpParameterSet(System.Data.IDbConnection,System.String,System.Boolean)">
            <summary>
            Resolve at run time the appropriate set of IDataParameters for a stored procedure
            </summary>
            <param name="connection">A valid IDbConnection object</param>
            <param name="spName">The name of the stored procedure</param>
            <param name="includeReturnValueParameter">Whether or not to include their return value parameter</param>
            <returns>The parameter array discovered.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if spName is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connection is null</exception>
        </member>
        <member name="F:CodeSmith.Engine.AdoHelper`1.m_rowUpdated">
            <summary>
            Internal handler used for bubbling up the event to the user
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.AdoHelper`1.m_rowUpdating">
            <summary>
            Internal handler used for bubbling up the event to the user
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetConnection(System.String)">
            <summary>
            Returns an IDbConnection object for the given connection string
            </summary>
            <param name="connectionString">The connection string to be used to create the connection</param>
            <returns>An IDbConnection object</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetDataAdapter">
            <summary>
            Returns an IDbDataAdapter object
            </summary>
            <returns>The IDbDataAdapter</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.DeriveParameters(System.Data.IDbCommand)">
            <summary>
            Calls the CommandBuilder.DeriveParameters method for the specified provider, doing any setup and cleanup necessary
            </summary>
            <param name="cmd">The IDbCommand referencing the stored procedure from which the parameter information is to be derived. The derived parameters are added to the Parameters collection of the IDbCommand. </param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetParameter">
            <summary>
            Returns an IDataParameter object
            </summary>
            <returns>The IDataParameter object</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.AddUpdateEventHandlers(System.Data.IDbDataAdapter,CodeSmith.Engine.AdoHelper{`0}.RowUpdatingHandler,CodeSmith.Engine.AdoHelper{`0}.RowUpdatedHandler)">
            <summary>
            Provider specific code to set up the updating/ed event handlers used by UpdateDataset
            </summary>
            <param name="dataAdapter">DataAdapter to attach the event handlers to</param>
            <param name="rowUpdatingHandler">The handler to be called when a row is updating</param>
            <param name="rowUpdatedHandler">The handler to be called when a row is updated</param>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetDataParameters(System.Int32)">
            <summary>
            Returns an array of IDataParameters of the specified size
            </summary>
            <param name="size">size of the array</param>
            <returns>The array of IDataParameters</returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.GetBlobParameter(System.Data.IDbConnection,System.Data.IDataParameter)">
            <summary>
            Handle any provider-specific issues with BLOBs here by "washing" the IDataParameter and returning a new one that is set up appropriately for the provider.
            </summary>
            <param name="connection">The IDbConnection to use in cleansing the parameter</param>
            <param name="p">The parameter before cleansing</param>
            <returns>The parameter after it's been cleansed.</returns>
        </member>
        <member name="T:CodeSmith.Engine.AdoHelper`1.RowUpdatedHandler">
            <summary>
            Delegate for creating a RowUpdatedEvent handler
            </summary>
            <param name="sender">The object that published the event</param>
            <param name="e">The RowUpdatedEventArgs for the event</param>
        </member>
        <member name="T:CodeSmith.Engine.AdoHelper`1.RowUpdatingHandler">
            <summary>
            Delegate for creating a RowUpdatingEvent handler
            </summary>
            <param name="sender">The object that published the event</param>
            <param name="e">The RowUpdatingEventArgs for the event</param>
        </member>
        <member name="T:CodeSmith.Engine.AdoHelper`1.AdoConnectionOwnership">
            <summary>
            This enum is used to indicate whether the connection was provided by the caller, or created by AdoHelper, so that
            we can set the appropriate CommandBehavior when calling ExecuteReader()
            </summary>
        </member>
        <member name="F:CodeSmith.Engine.AdoHelper`1.AdoConnectionOwnership.Internal">
            <summary>Connection is owned and managed by ADOHelper</summary>
        </member>
        <member name="F:CodeSmith.Engine.AdoHelper`1.AdoConnectionOwnership.External">
            <summary>Connection is owned and managed by the caller</summary>
        </member>
        <member name="T:CodeSmith.Engine.AdoHelper`1.ADOHelperParameterCache">
            <summary>
            ADOHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
            ability to discover parameters for stored procedures at run-time.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ADOHelperParameterCache.CloneParameters(System.Data.IDataParameter[])">
            <summary>
            Deep copy of cached IDataParameter array
            </summary>
            <param name="originalParameters"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ADOHelperParameterCache.CacheParameterSet(System.String,System.String,System.Data.IDataParameter[])">
            <summary>
            Add parameter array to the cache
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <param name="commandParameters">An array of IDataParameters to be cached</param>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.AdoHelper`1.ADOHelperParameterCache.GetCachedParameterSet(System.String,System.String)">
            <summary>
            Retrieve a parameter array from the cache
            </summary>
            <param name="connectionString">A valid connection string for an IDbConnection</param>
            <param name="commandText">The stored procedure name or SQL command</param>
            <returns>An array of IDataParameters</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if commandText is null</exception>
            <exception cref="T:System.ArgumentNullException">Thrown if connectionString is null</exception>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.#ctor">
            <summary>
            Initializes a new instance of the <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.#ctor(System.String)">
            <summary>
            Initializes a new instance of the <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/> class.
            </summary>
            <param name="friendlyName">Name of the friendly.</param>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.Finalize">
            <summary>
            Releases unmanaged resources and performs other cleanup operations before the
            <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/> is reclaimed by garbage collection.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.CreateInstance``1">
            <summary>
            Creates an instance in the <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/>.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.CreateInstance``1(System.Object[])">
            <summary>
            Creates an instance in the <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/>.
            </summary>
            <param name="args">The constructor args.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.Dispose">
            <summary>
            Performs application-defined tasks associated with freeing, 
            releasing, or resetting unmanaged resources.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.CodeSmithDomainFactory.NeedCodeSmithDomain">
            <summary>
            Need a <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/>.
            </summary>
            <returns>true if a <see cref="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain"/> is needed.</returns>
        </member>
        <member name="P:CodeSmith.Engine.CodeSmithDomainFactory.CodeSmithDomain">
            <summary>
            Gets the CodeSmith <see cref="T:System.AppDomain"/>.
            </summary>
            <value>The CodeSmith <see cref="T:System.AppDomain"/>.</value>
        </member>
        <member name="T:CodeSmith.Engine.Utility.EnumHelper">
            <summary>
            A class to help with Enum Flags.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.IsAnyFlagOn``1(``0,``0)">
            <summary>
            Determines whether any flag is on for the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to check if the flag is on.</param>
            <param name="flag">The flag to check for in the mask.</param>
            <returns>
            	<c>true</c> if any flag is on for the specified mask; otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.IsFlagOn``1(``0,``0)">
            <summary>
            Determines whether the flag is on for the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to check if the flag is on.</param>
            <param name="flag">The flag to check for in the mask.</param>
            <returns>
            	<c>true</c> if the flag is on for the specified mask; otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.SetFlagOn``1(``0@,``0)">
            <summary>
            Sets the flag on in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to set flag on.</param>
            <param name="flag">The flag to set.</param>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.SetFlagOn``1(``0,``0)">
            <summary>
            Sets the flag on in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to set flag on.</param>
            <param name="flag">The flag to set.</param>
            <returns>The mask with the flag set to on.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.SetFlagOff``1(``0@,``0)">
            <summary>
            Sets the flag off in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to set flag off.</param>
            <param name="flag">The flag to set.</param>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.SetFlagOff``1(``0,``0)">
            <summary>
            Sets the flag off in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to set flag off.</param>
            <param name="flag">The flag to set.</param>
            <returns>The mask with the flag set to off.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.ToggleFlag``1(``0@,``0)">
            <summary>
            Toggles the flag in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to toggle the flag against.</param>
            <param name="flag">The flag to toggle.</param>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.ToggleFlag``1(``0,``0)">
            <summary>
            Toggles the flag in the specified mask.
            </summary>
            <typeparam name="T">The flag type.</typeparam>
            <param name="mask">The mask to toggle the flag against.</param>
            <param name="flag">The flag to toggle.</param>
            <returns>The mask with the flag set in the opposite position then it was.</returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.ToStringHex``1(``0)">
            <summary>
            Gets the string hex of the enum.
            </summary>
            <typeparam name="T">The enum type.</typeparam>
            <param name="enum">The enum to get the string hex from.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.Utility.EnumHelper.TryParseEnum``1(System.String,``0@)">
            <summary>
            Tries to get an enum from a string.
            </summary>
            <typeparam name="T">The enum type.</typeparam>
            <param name="input">The input string.</param>
            <param name="returnValue">The return enum value.</param>
            <returns>
            	<c>true</c> if the string was able to be parsed to an enum; otherwise, <c>false</c>.
            </returns>
        </member>
        <member name="T:CodeSmith.Engine.Inflector">
            <summary>
            The Inflector class transforms words from one 
            form to another. For example, from singular to plural.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.Inflector.Pluralize(System.String)">
            <summary>
            Return the plural of a word.
            </summary>
            <param name="word">The singular form</param>
            <returns>The plural form of <paramref name="word"/></returns>
        </member>
        <member name="M:CodeSmith.Engine.Inflector.Singularize(System.String)">
            <summary>
            Return the singular of a word.
            </summary>
            <param name="word">The plural form</param>
            <returns>The singular form of <paramref name="word"/></returns>
        </member>
        <member name="M:CodeSmith.Engine.Inflector.Capitalize(System.String)">
            <summary>
            Capitalizes a word.
            </summary>
            <param name="word">The word to be capitalized.</param>
            <returns><paramref name="word"/> capitalized.</returns>
        </member>
        <member name="T:CodeSmith.Engine.ObjectCopier">
            <summary>
            Copy data from a source into a target object by copying public property values.
            </summary>
            <remarks></remarks>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Object)">
            <summary>
            Copies values from the source into the properties of the target.
            </summary>
            <param name="source">An object containing the source values.</param>
            <param name="target">An object with properties to be set from the source.</param>
            <remarks>
            The property names and types of the source object must match the property names and types
            on the target object. Source properties may not be indexed. 
            Target properties may not be readonly or indexed.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Object,System.String[])">
            <summary>
            Copies values from the source into the properties of the target.
            </summary>
            <param name="source">An object containing the source values.</param>
            <param name="target">An object with properties to be set from the source.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be set on the target object.</param>
            <remarks>
            The property names and types of the source object must match the property names and types
            on the target object. Source properties may not be indexed. 
            Target properties may not be readonly or indexed.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Object,System.Boolean,System.String[])">
            <summary>
            Copies values from the source into the properties of the target.
            </summary>
            <param name="source">An object containing the source values.</param>
            <param name="target">An object with properties to be set from the source.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be set on the target object.</param>
            <param name="suppressExceptions">If <see langword="true"/>, any exceptions will be supressed.</param>
            <remarks>
            <para>
            The property names and types of the source object must match the property names and types
            on the target object. Source properties may not be indexed. 
            Target properties may not be readonly or indexed.
            </para><para>
            Properties to copy are determined based on the source object. Any properties
            on the source object marked with the <see cref="T:System.ComponentModel.BrowsableAttribute"/> equal
            to false are ignored.
            </para>
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Copies values from the source into the target IDictionary.
            </summary>
            <param name="source">The source object.</param>
            <param name="target">The target IDictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Collections.Generic.IDictionary{System.String,System.Object},System.String[])">
            <summary>
            Copies values from the source into the target IDictionary.
            </summary>
            <param name="source">The source object.</param>
            <param name="target">The target IDictionary.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be added to the targed IDictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Object,System.Collections.Generic.IDictionary{System.String,System.Object},System.Boolean,System.String[])">
            <summary>
            Copies values from the source into the target IDictionary.
            </summary>
            <param name="source">The source object.</param>
            <param name="target">The target IDictionary.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be added to the targed IDictionary.</param>
            <param name="suppressExceptions">If <see langword="true" />, any exceptions will be supressed.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object)">
            <summary>
            Copies values from the IDictionary into the properties of the target.
            </summary>
            <param name="source">The IDictionary source.</param>
            <param name="target">The target object.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object,System.String[])">
            <summary>
            Copies values from the IDictionary into the properties of the target.
            </summary>
            <param name="source">The IDictionary source.</param>
            <param name="target">The target object.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be set on the target object.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.Copy(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object,System.Boolean,System.String[])">
            <summary>
            Copies values from the IDictionary into the properties of the target.
            </summary>
            <param name="source">The IDictionary source.</param>
            <param name="target">The target object.</param>
            <param name="ignoreList">A list of property names to ignore. 
            These properties will not be set on the target object.</param>
            <param name="suppressExceptions">If <see langword="true" />, any exceptions will be supressed.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.SetPropertyValue(System.Object,System.String,System.Object)">
            <summary>
            Sets an object's property with the specified value,
            converting that value to the appropriate type if possible.
            </summary>
            <param name="target">Object containing the property to set.</param>
            <param name="propertyName">Name of the property to set.</param>
            <param name="value">Value to set into the property.</param>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.GetPropertyValue(System.Object,System.String)">
            <summary>
            Gets an object's property value by name.
            </summary>
            <param name="target">Object containing the property to get.</param>
            <param name="propertyName">Name of the property.</param>
            <returns>The value of the property.</returns>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.GetUnderlyingType(System.Type)">
            <summary>
            Gets the underlying type dealing with Nullable.
            </summary>
            <param name="type">The type.</param>
            <returns>Returns a type dealing with Nullable.</returns>
        </member>
        <member name="M:CodeSmith.Engine.ObjectCopier.FindProperty(System.Type,System.String)">
            <summary>
            Finds a <see cref="T:System.Reflection.PropertyInfo"/> by name ignoring case.
            </summary>
            <param name="type">The type to search.</param>
            <param name="propertyName">Name of the property.</param>
            <returns>A <see cref="T:System.Reflection.PropertyInfo"/> matching the property name.</returns>
            <remarks>
            FindProperty will first try to get a property matching the name and case of the 
            property name specified.  If a property cannot be found, all the properties will
            be searched ignoring the case of the name.
            </remarks>
        </member>
        <member name="M:CodeSmith.Engine.Utility.PathUtil.RelativePathTo(System.String,System.String)">
            <summary>
            Creates a relative path from one file or folder to another.
            </summary>
            <param name="fromDirectory">Contains the directory that defines the start of the relative path.</param>
            <param name="toPath">Contains the path that defines the endpoint of the relative path.</param>
            <returns>The relative path from the start directory to the end path.</returns>
            <exception cref="T:System.ArgumentNullException"></exception>
        </member>
        <member name="T:CodeSmith.Engine.SafeDataReader">
            <summary>
            This is a DataReader that 'fixes' any null values before
            they are returned to our business code.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.#ctor(System.Data.IDataReader)">
            <summary>
            Initializes the SafeDataReader object to use data from
            the provided DataReader object.
            </summary>
            <param name="dataReader">The source DataReader object containing the data.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetString(System.Int32)">
            <summary>
            Gets a string value from the datareader.
            </summary>
            <remarks>
            Returns empty string for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetValue(System.Int32)">
            <summary>
            Gets a value of type <see cref="T:System.Object"/> from the datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt32(System.Int32)">
            <summary>
            Gets an integer from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDouble(System.Int32)">
            <summary>
            Gets a double from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetGuid(System.Int32)">
            <summary>
            Gets a Guid value from the datareader.
            </summary>
            <remarks>
            Returns Guid.Empty for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.Read">
            <summary>
            Reads the next row of data from the datareader.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.NextResult">
            <summary>
            Moves to the next result set in the datareader.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.Close">
            <summary>
            Closes the datareader.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetBoolean(System.Int32)">
            <summary>
            Gets a boolean value from the datareader.
            </summary>
            <remarks>
            Returns <see langword="false" /> for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetByte(System.Int32)">
            <summary>
            Gets a byte value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)">
            <summary>
            Invokes the GetBytes method of the underlying datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
            <param name="buffer">Array containing the data.</param>
            <param name="bufferOffset">Offset position within the buffer.</param>
            <param name="fieldOffset">Offset position within the field.</param>
            <param name="length">Length of data to read.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetChar(System.Int32)">
            <summary>
            Gets a char value from the datareader.
            </summary>
            <remarks>
            Returns Char.MinValue for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)">
            <summary>
            Invokes the GetChars method of the underlying datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
            <param name="buffer">Array containing the data.</param>
            <param name="bufferOffset">Offset position within the buffer.</param>
            <param name="fieldOffset">Offset position within the field.</param>
            <param name="length">Length of data to read.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetData(System.Int32)">
            <summary>
            Invokes the GetData method of the underlying datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDataTypeName(System.Int32)">
            <summary>
            Invokes the GetDataTypeName method of the underlying datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDateTime(System.Int32)">
            <summary>
            Gets a date value from the datareader.
            </summary>
            <remarks>
            Returns DateTime.MinValue for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDecimal(System.Int32)">
            <summary>
            Gets a decimal value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetFieldType(System.Int32)">
            <summary>
            Invokes the GetFieldType method of the underlying datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetFloat(System.Int32)">
            <summary>
            Gets a Single value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt16(System.Int32)">
            <summary>
            Gets a Short value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt64(System.Int32)">
            <summary>
            Gets a Long value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetName(System.Int32)">
            <summary>
            Invokes the GetName method of the underlying datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetOrdinal(System.String)">
            <summary>
            Gets an ordinal value from the datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetSchemaTable">
            <summary>
            Invokes the GetSchemaTable method of the underlying datareader.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetValues(System.Object[])">
            <summary>
            Invokes the GetValues method of the underlying datareader.
            </summary>
            <param name="values">An array of System.Object to
            copy the values into.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.IsDBNull(System.Int32)">
            <summary>
            Invokes the IsDBNull method of the underlying datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.Dispose">
            <summary>
            Disposes the object.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.Dispose(System.Boolean)">
            <summary>
            Disposes the object.
            </summary>
            <param name="disposing">True if called by
            the public Dispose method.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.Finalize">
            <summary>
            Object finalizer.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetString(System.String)">
            <summary>
            Gets a string value from the datareader.
            </summary>
            <remarks>
            Returns empty string for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetValue(System.String)">
            <summary>
            Gets a value of type <see cref="T:System.Object"/> from the datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt32(System.String)">
            <summary>
            Gets an integer from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDouble(System.String)">
            <summary>
            Gets a double from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetGuid(System.String)">
            <summary>
            Gets a Guid value from the datareader.
            </summary>
            <remarks>
            Returns Guid.Empty for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetBoolean(System.String)">
            <summary>
            Gets a boolean value from the datareader.
            </summary>
            <remarks>
            Returns <see langword="false" /> for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetByte(System.String)">
            <summary>
            Gets a byte value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetBytes(System.String,System.Int64,System.Byte[],System.Int32,System.Int32)">
            <summary>
            Invokes the GetBytes method of the underlying datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
            <param name="buffer">Array containing the data.</param>
            <param name="bufferOffset">Offset position within the buffer.</param>
            <param name="fieldOffset">Offset position within the field.</param>
            <param name="length">Length of data to read.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetChar(System.String)">
            <summary>
            Gets a char value from the datareader.
            </summary>
            <remarks>
            Returns Char.MinValue for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetChars(System.String,System.Int64,System.Char[],System.Int32,System.Int32)">
            <summary>
            Invokes the GetChars method of the underlying datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
            <param name="buffer">Array containing the data.</param>
            <param name="bufferOffset">Offset position within the buffer.</param>
            <param name="fieldOffset">Offset position within the field.</param>
            <param name="length">Length of data to read.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetData(System.String)">
            <summary>
            Invokes the GetData method of the underlying datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDataTypeName(System.String)">
            <summary>
            Invokes the GetDataTypeName method of the underlying datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDateTime(System.String)">
            <summary>
            Gets a date value from the datareader.
            </summary>
            <remarks>
            Returns DateTime.MinValue for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetDecimal(System.String)">
            <summary>
            Gets a decimal value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetFieldType(System.String)">
            <summary>
            Invokes the GetFieldType method of the underlying datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetFloat(System.String)">
            <summary>
            Gets a Single value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt16(System.String)">
            <summary>
            Gets a Short value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.GetInt64(System.String)">
            <summary>
            Gets a Long value from the datareader.
            </summary>
            <remarks>
            Returns 0 for null.
            </remarks>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="M:CodeSmith.Engine.SafeDataReader.IsDBNull(System.String)">
            <summary>
            Invokes the IsDBNull method of the underlying datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.DataReader">
            <summary>
            Get a reference to the underlying data reader
            object that actually contains the data from
            the data source.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.Depth">
            <summary>
            Returns the depth property value from the datareader.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.FieldCount">
            <summary>
            Returns the FieldCount property from the datareader.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.IsClosed">
            <summary>
            Returns the IsClosed property value from the datareader.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.Item(System.String)">
            <summary>
            Returns a value from the datareader.
            </summary>
            <param name="name">Name of the column containing the value.</param>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.Item(System.Int32)">
            <summary>
            Returns a value from the datareader.
            </summary>
            <param name="i">Ordinal column position of the value.</param>
        </member>
        <member name="P:CodeSmith.Engine.SafeDataReader.RecordsAffected">
            <summary>
            Returns the RecordsAffected property value from the underlying datareader.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.SerializableDictionary`2">
            <summary>
            Represents a xml serializable collection of keys and values.
            </summary>
            <typeparam name="TKey">The type of the keys in the dictionary.</typeparam>
            <typeparam name="TValue">The type of the values in the dictionary.</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="dictionary">The dictionary.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="comparer">The comparer.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="capacity">The capacity.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1},System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="dictionary">The dictionary.</param>
            <param name="comparer">The comparer.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Int32,System.Collections.Generic.IEqualityComparer{`0})">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="capacity">The capacity.</param>
            <param name="comparer">The comparer.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.SerializableDictionary`2"/> class.
            </summary>
            <param name="info">A <see cref="T:System.Runtime.Serialization.SerializationInfo"/> object containing the information required to serialize the <see cref="T:System.Collections.Generic.Dictionary`2"/>.</param>
            <param name="context">A <see cref="T:System.Runtime.Serialization.StreamingContext"/> structure containing the source and destination of the serialized stream associated with the <see cref="T:System.Collections.Generic.Dictionary`2"/>.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.System#Xml#Serialization#IXmlSerializable#GetSchema">
            <summary>
            This property is reserved, apply the 
            <see cref="T:XmlSchemaProviderAttribute" /> to the class instead.
            </summary>
            <returns>
            An <see cref="T:System.Xml.Schema.XmlSchema" />
            that describes the XML representation of the object that 
            is produced by the <see cref="M:IXmlSerializable.WriteXml(System.Xml.XmlWriter)" />
            method and consumed by the <see cref="M:IXmlSerializable.ReadXml(System.Xml.XmlReader)" />
            method.
            </returns>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.System#Xml#Serialization#IXmlSerializable#ReadXml(System.Xml.XmlReader)">
            <summary>
            Generates an object from its XML representation.
            </summary>
            <param name="reader">The <see cref="T:System.Xml.XmlReader" />
            stream from which the object is deserialized.</param>
        </member>
        <member name="M:CodeSmith.Engine.SerializableDictionary`2.System#Xml#Serialization#IXmlSerializable#WriteXml(System.Xml.XmlWriter)">
            <summary>
            Converts an object into its XML representation.
            </summary>
            <param name="writer">The <see cref="T:System.Xml.XmlWriter" />
            stream to which the object is serialized.</param>
        </member>
        <member name="T:CodeSmith.Engine.IndexedEnumerable">
            <summary>
            IndexedEnumerable makes enumerating over collections much easier by implementing properties like: IsEven, IsOdd, IsLast.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable.Create``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Returns an IndexedEnumerable from any collection implementing IEnumerable&lt;T&gt;
            </summary>
            <typeparam name="T">Type of enumerable</typeparam>
            <param name="source">Source enumerable</param>
            <returns>A new IndexedEnumerable&lt;T&gt;.</returns>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable.AsIndexedEnumerable``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Returns an IndexedEnumerable from any collection implementing IEnumerable&lt;T&gt;
            </summary>
            <typeparam name="T">Type of enumerable</typeparam>
            <param name="source">Source enumerable</param>
            <returns>A new IndexedEnumerable&lt;T&gt;.</returns>
        </member>
        <member name="T:CodeSmith.Engine.IndexedEnumerable`1">
            <summary>
            IndexedEnumerable makes enumerating over collections much easier by implementing properties like: IsEven, IsOdd, IsLast.
            </summary>
            <typeparam name="T">Type to iterate over</typeparam>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable`1.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Constructor that takes an IEnumerable&lt;T&gt;
            </summary>
            <param name="enumerable">The collection to enumerate.</param>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable`1.GetEnumerator">
            <summary>
            Returns an enumeration of Entry objects.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.IndexedEnumerable`1.System#Collections#IEnumerable#GetEnumerator">
            <summary>
            Non-generic form of GetEnumerator.
            </summary>
        </member>
        <member name="T:CodeSmith.Engine.IndexedEnumerable`1.EntryItem">
            <summary>
            Represents each entry returned within a collection,
            containing the _value and whether it is the first and/or
            the last entry in the collection's. enumeration
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.Value">
            <summary>
            The Entry Value.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.IsFirst">
            <summary>
            Returns true if it is the first item in the collection.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.IsLast">
            <summary>
            Returns true if it is the last item in the collection.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.Index">
            <summary>
            The index of the current item in the collection.
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.IsEven">
            <summary>
            Returns true if the current item has an even index
            </summary>
        </member>
        <member name="P:CodeSmith.Engine.IndexedEnumerable`1.EntryItem.IsOdd">
            <summary>
            Returns true if the current item has an odd index
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.IsPlural(System.String)">
            <summary>
            Determines if a string is in plural form based on some simple rules.
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.IsSingular(System.String)">
            <summary>
            Determines if a string is in singular form based on some simple rules.
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToPlural(System.String)">
            <summary>
            Converts a string to plural based on some simple rules.
            </summary>
            <param name="value">The value to convert.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToPlural(System.String,System.String)">
            <summary>
            Converts a string to plural based on some simple rules.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="pluralOverridesMapFile">The plural overrides map file.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToPlural(System.String,CodeSmith.Engine.MapCollection)">
            <summary>
            Converts a string to plural based on some simple rules.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="pluralOverridesMap">The plural overrides map.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToSingular(System.String)">
            <summary>
            Converts a string to singular based on some simple rules.
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToSingular(System.String,System.String)">
            <summary>
            Converts a string to singular based on some simple rules.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="pluralOverridesMapFile">The plural overrides map file.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToSingular(System.String,CodeSmith.Engine.MapCollection)">
            <summary>
            Converts a string to singular based on some simple rules.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="pluralOverridesMap">The plural overrides map.</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToCamelCase(System.String)">
            <summary>
            Converts a string to use camelCase.
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToPascalCase(System.String)">
            <summary>
            Converts a string to use PascalCase.
            </summary>
            <param name="value">Text to convert</param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.ToSpacedWords(System.String)">
            <summary>
            Takes a NameIdentifier and spaces it out into words "Name Identifier".
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.IsNumeric(System.String)">
            <summary>
            Determines if a string is a numeric value.
            </summary>
            <param name="value"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.AppendOrdinalSuffix(System.String)">
            <summary>
            Takes a number and appends the ordinal suffix. ie. 1 = 1st, 13 = 13th.
            </summary>
            <param name="number"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.StringUtil.AppendOrdinalSuffix(System.Int32)">
            <summary>
            Takes a number and appends the ordinal suffix. ie. 1 = 1st, 13 = 13th.
            </summary>
            <param name="number"></param>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"/> class.
            </summary>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
            <summary>Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> class that contains elements copied from the specified <see cref="T:System.Collections.Generic.IDictionary`2"></see> and uses the default equality comparer for the key type.</summary>
            <param name="dictionary">The <see cref="T:System.Collections.Generic.IDictionary`2"></see> whose elements are copied to the new <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</param>
            <exception cref="T:System.ArgumentException">dictionary contains one or more duplicate keys.</exception>
            <exception cref="T:System.ArgumentNullException">dictionary is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor(System.Collections.Generic.IEqualityComparer{`0})">
            <summary>Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> class that is empty, has the default initial capacity, and uses the specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see>.</summary>
            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see> implementation to use when comparing keys, or null to use the default <see cref="T:System.Collections.Generic.EqualityComparer`1"></see> for the type of the key.</param>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor(System.Int32)">
            <summary>Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> class that is empty, has the specified initial capacity, and uses the default equality comparer for the key type.</summary>
            <param name="capacity">The initial number of elements that the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> can contain.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">capacity is less than 0.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1},System.Collections.Generic.IEqualityComparer{`0})">
            <summary>Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> class that contains elements copied from the specified <see cref="T:System.Collections.Generic.IDictionary`2"></see> and uses the specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see>.</summary>
            <param name="dictionary">The <see cref="T:System.Collections.Generic.IDictionary`2"></see> whose elements are copied to the new <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</param>
            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see> implementation to use when comparing keys, or null to use the default <see cref="T:System.Collections.Generic.EqualityComparer`1"></see> for the type of the key.</param>
            <exception cref="T:System.ArgumentException">dictionary contains one or more duplicate keys.</exception>
            <exception cref="T:System.ArgumentNullException">dictionary is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.#ctor(System.Int32,System.Collections.Generic.IEqualityComparer{`0})">
            <summary>Initializes a new instance of the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> class that is empty, has the specified initial capacity, and uses the specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see>.</summary>
            <param name="capacity">The initial number of elements that the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> can contain.</param>
            <param name="comparer">The <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see> implementation to use when comparing keys, or null to use the default <see cref="T:System.Collections.Generic.EqualityComparer`1"></see> for the type of the key.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">capacity is less than 0.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.Add(`0,`1)">
            <summary>Adds the specified key and value to the dictionary.</summary>
            <param name="value">The value of the element to add. The value can be null for reference types.</param>
            <param name="key">The key of the element to add.</param>
            <exception cref="T:System.ArgumentException">An element with the same key already exists in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</exception>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.Clear">
            <summary>Removes all keys and values from the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.ContainsKey(`0)">
            <summary>Determines whether the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> contains the specified key.</summary>
            <returns>true if the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> contains an element with the specified key; otherwise, false.</returns>
            <param name="key">The key to locate in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</param>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.ContainsValue(`1)">
            <summary>Determines whether the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> contains a specific value.</summary>
            <returns>true if the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> contains an element with the specified value; otherwise, false.</returns>
            <param name="value">The value to locate in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>. The value can be null for reference types.</param>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.GetEnumerator">
            <summary>Returns an enumerator that iterates through the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
            <returns>A <see cref="T:System.Collections.Generic.Dictionary`2.Enumerator"></see> structure for the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</returns>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>Implements the <see cref="T:System.Runtime.Serialization.ISerializable"></see> interface and returns the data needed to serialize the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> instance.</summary>
            <param name="context">A <see cref="T:System.Runtime.Serialization.StreamingContext"></see> structure that contains the source and destination of the serialized stream associated with the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> instance.</param>
            <param name="info">A <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> object that contains the information required to serialize the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> instance.</param>
            <exception cref="T:System.ArgumentNullException">info is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.OnDeserialization(System.Object)">
            <summary>Implements the <see cref="T:System.Runtime.Serialization.ISerializable"></see> interface and raises the deserialization event when the deserialization is complete.</summary>
            <param name="sender">The source of the deserialization event.</param>
            <exception cref="T:System.Runtime.Serialization.SerializationException">The <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> object associated with the current <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> instance is invalid.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.Remove(`0)">
            <summary>Removes the value with the specified key from the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
            <returns>true if the element is successfully found and removed; otherwise, false.  This method returns false if key is not found in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</returns>
            <param name="key">The key of the element to remove.</param>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.TryGetValue(`0,`1@)">
            <summary>
            Gets the value associated with the specified key.
            </summary>
            <param name="key">The key whose value to get.</param>
            <param name="value">When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the <paramref name="value"/> parameter. This parameter is passed uninitialized.</param>
            <returns>
            true if the object that implements <see cref="T:System.Collections.Generic.IDictionary`2"/> contains an element with the specified key; otherwise, false.
            </returns>
            <exception cref="T:System.ArgumentNullException"><paramref name="key"/> is null.</exception>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.GetReadLock">
            <summary>
            Gets the read lock.
            </summary>
            <returns></returns>
        </member>
        <member name="M:CodeSmith.Engine.ThreadSafeDictionary`2.GetWriteLock">
            <summary>
            Gets the write lock.
            </summary>
            <returns></returns>
        </member>
        <member name="P:CodeSmith.Engine.ThreadSafeDictionary`2.Comparer">
            <summary>Gets the <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see> that is used to determine equality of keys for the dictionary. </summary>
            <returns>The <see cref="T:System.Collections.Generic.IEqualityComparer`1"></see> generic interface implementation that is used to determine equality of keys for the current <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see> and to provide hash values for the keys.</returns>
        </member>
        <member name="P:CodeSmith.Engine.ThreadSafeDictionary`2.Count">
            <summary>Gets the number of key/value pairs contained in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
            <returns>The number of key/value pairs contained in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.ThreadSafeDictionary`2.Item(`0)">
            <summary>Gets or sets the value associated with the specified key.</summary>
            <returns>The value associated with the specified key. If the specified key is not found, a get operation throws a <see cref="T:System.Collections.Generic.KeyNotFoundException"></see>, and a set operation creates a new element with the specified key.</returns>
            <param name="key">The key of the value to get or set.</param>
            <exception cref="T:System.ArgumentNullException">key is null.</exception>
            <exception cref="T:System.Collections.Generic.KeyNotFoundException">The property is retrieved and key does not exist in the collection.</exception>
        </member>
        <member name="P:CodeSmith.Engine.ThreadSafeDictionary`2.Keys">
            <summary>Gets a collection containing the keys in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
            <returns>A <see cref="T:System.Collections.Generic.Dictionary`2.KeyCollection"></see> containing the keys in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</returns>
        </member>
        <member name="P:CodeSmith.Engine.ThreadSafeDictionary`2.Values">
            <summary>Gets a collection containing the values in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</summary>
            <returns>A <see cref="T:System.Collections.Generic.Dictionary`2.ValueCollection"></see> containing the values in the <see cref="T:CodeSmith.Engine.ThreadSafeDictionary`2"></see>.</returns>
        </member>
    </members>
</doc>
